虚幻引擎5.2版本说明 您所在的位置:网站首页 advanced bios features翻译 虚幻引擎5.2版本说明

虚幻引擎5.2版本说明

#虚幻引擎5.2版本说明 | 来源: 网络整理| 查看: 265

本页面的内容

渲染

音频

编辑器 - UI

建模

动画

平台

XR

移动端

Gameplay

人工智能

[新增] 神经网络引擎(NNE)

物理

Niagara

Unreal Insights

Datasmith

开发者工具

基础 - 核心

像素流

程序化内容生成框架(实验性)

虚拟制片

平台SDK更新

版本说明

更新说明

新内容

虚幻引擎5.2在5.0和5.1的框架和功能基础上进一步拓展,并为用户带来了更多全新工具。5.2版本提供了诸多更新和改进,能让用户在打造次世代实时3D内容和体验时更加得心应手。同时我们将继续致力于让我们的功能集更加强大、适应工作流程、用途广泛,尽可能满足不同部门的需要。

程序化内容生成

程序化内容生成框架(PCG)为你创建自定义程序化内容提供了途径。借助PCG,美术师和设计师能够打造出各种有助于快速迭代的工具,从生成建筑物到生态环境,乃至整个世界,不一而足。

Substrate

Substrate是一种全新的材质创作方式,能让用户更好地控制对象外观。启用Substrate后,固定着色模型会被替换为表现力更强、更模块化的多支(multi-lobe)框架,从而提供更广泛的外观表现和更宽泛的参数空间供用户使用。

虚拟制片改进

SMPTE 2110集成

现在,在nDisplay群集设置中,你可以借助Rivermax SMPTE 2110实现以下功能:

拥有多个4K视频流。

将摄像机的内视锥画面渲染到专用设备上。

iOS Stage App 现在,你可以在舞台上使用iOS本地操作应用。它提供了更加简化的操作方式,功能包括:

发光板

标记

色彩校正窗口

虚拟摄像机改进 现在,你可以通过虚拟摄像机实现以下功能:

在单个编辑器会话中流送多个摄像机画面。

使用绑定轨道(Rigrail)。 此外,我们还简化了虚拟摄像机蓝图。

DMX改进 DMX的功能控制台(Control Console)得到了简化,功能调试和物理/虚拟灯具控制将更加便捷。此外还有多项UI改进。

ML变形器示例

请下载全新的机器学习变形器(Machine Learning (ML) Deformer)示例项目,通过案例了解如何使用ML变形器系统来获得角色的全身网格体变形效果。

启动程序版本现支持macOS通用二进制文件

在Epic Games启动程序(Epic Games Launcher)上发行的虚幻引擎版本现包含适用于macOS的通用二进制文件(Universal Binary),能为Apple Silicon(ARM64)和基于Intel的(x86-64)mac提供原生支持。在macOS上下载并安装UE 5.2时,虚幻编辑器将自动选择适合你架构的二进制代码版本。Apple Silicon用户应该会体验到性能改进。此外,我们还为使用Apple Silicon设备的macOS用户进行了多项改进,包括:

修复窗口焦点处理问题。

支持新款Mac的屏幕顶部"刘海"效果。

详情请参阅虚幻编辑器的原生Apple Silicon支持。 此外,此次更新后,5.2相关的虚幻商城内容将对macOS用户开放!

请继续阅读本文,了解以上工具的详情以及虚幻引擎5.2中的所有改进内容。

此版本还包含虚幻引擎社区开发者在GitHub上提交的诸多改进。感谢所有为虚幻引擎5.2做出贡献的开发者:

909185693, aaronmjacobs, ActiveXSturcture, AfterThunk, aidinabedi, alexirae, ameaninglessname, ameyghan, amuTBKT, anon-oss, APandaWithAGun, aquanox, bestofact, bretternst, brian2524, brumenn, brunnio, chris03, dapetcu21, davidyrgilbert, dbsigurd, DecoyRS, disseminate, dman82499, dorgonman, DreikaEru, Duroxxigar, EchoRed-3D, Edstub207, ennorehling, Erlite, foobit, forsakenyang, gaborpapp, galeone, gameknife, geordiemhall, gtreshchev, hach-que, huklen, HunterVacui, Ident, imatakeharuhiko, iniside, jlnordin, jlsalmon, jm00517, joeycarr, jszakmeister, kedamazigoku, KeithRare, kentzhang-geek, l2oe, LairdWT, leith-bartrich, LiamGiiV, lineageiori, LizardThief, LouRohanNV, marcussvensson92, Mattiwatti, Megafunk, MichaelBell, MilkyEngineer, MothDoctor, Murazaki, nklose, nutti, oxxxydimon, PapeCoding, pear-studio, Pico-XR, RadAlex, RandomInEqualities, real-mikhail, Ryan-DowlingSoka, satoshi-iwaki, Scaless, SeamusBao666, SlashParadox, slonopotamus, Sn-a-ke, SRombauts, stlnkm, sunduk, SungJJinKang, Sythenz, Temaran, TheJamsh, thomasvanta, timrademaker, TroutZhang, Tryum, tustanivsky, tuxerr, UntamedLoli, VesCodes, Victov, vorixo, whatthesamuel, x157, zorbathut

渲染 Nanite

针对Nanite的功能更新和性能改良:

增加了对自定义深度(Custom Depth)、模板(Stencils)、光照通道(Lighting Channel)和全局裁剪平面(Global Clip Plane)的额外功能支持。

增加了可变精度法线;用于在汽车上实现高品质反射。

新增"最大世界位置偏移置换(Max World Position Offset Displacement)"设置,用于修复游戏对象在同时使用世界位置偏移(World Position Offset)和Nanite时产生的瑕疵。

现可通过视口视图模式中的 可视化(Visualize)> 越界像素(Out of Bounds Pixels) 查看WPO在何处受最大偏移限制。

我们更新了Nanite流送器(用于从磁盘流送几何体数据群集),从而提高性能、稳定性并改进统计数据。

基于静态纹理贴图进行预计算的Nanite位移贴图(测试版)。

如需详情,请参阅Nanite。

Lumen

针对Lumen的画面和性能改进:

改进了角色身上纤薄类型几何体(例如衬衫皱褶、鼻子、耳朵)的GI和遮蔽效果,并能更好地配合毛发Groom。

高质量半透明反射现在也能支持材质粗糙度(不再仅限于镜面)。

表面缓存现在由软件光线追踪(SWRT)反射的反馈驱动,从而提供更高分辨率的反射以及对场景变化的更快反应。

SWRT模式默认在主机上使用异步计算。

硬件光线追踪(HWRT)命中光照能更好地近似表现反射中的二级反射。

硬件光线追踪(HWRT)命中光照支持双面植被。

详情请参阅Lumen全局光照和反射、Lumen技术细节和Lumen性能指南。

Substrate(试验性)

Substrate(之前称为Strata)会将着色模型的固定套件(例如默认光照和透明涂层)替换为表现力更强、更为模块化的框架,以提供更广泛的外观表现和参数空间。性能开销会根据复杂度和预算期望而上下调整,而旧版材质(转换后)的开销与以前相似。

早在UE 5.1中就发布了Substrate的早期测试版本。在5.2中,它仍处于试验性阶段。请勿将它用于生产版本开发,但我们鼓励你们试用它并提供反馈。

虚幻引擎5.2包含了功能、稳定性和性能方面的许多改进,其中包括:

删除了金属(Metallic)参数化,以简化Slab节点逻辑。你可以使用 SubstrateMetalness-To-DiffuseAlbedo-F0 辅助节点来转换金属风格的参数。

现在可以在垂直分层(Vertical Layering)节点中指定Slab厚度,以便轻松复用包含Slab的材质函数,同时提供独立的Strata控制。

现在你可以预览Substrate节点,效果类似预览旧版材质节点。

我们改进了布料材质的分层/能量保存功能,并增加了独立的粗糙度值。

我们增加了对移动平台(基于延迟渲染的移动端除外)的初步支持。

我们增加了对Nintendo Switch的初步支持。

在将旧版材质转换为Substrate时,节点位置更易于辨识。

我们修复了读取场景GBuffer数据的后期处理的问题。

我们改进了材质编辑器中的节点预览。

我们改进了折射控制,以便默认情况下让F0驱动折射率(IOR),但这可以覆盖。

我们更新了Substrate混合模式,它们现在可用于材质实例。

现在你可以在材质编辑器的Substrate选项卡中预览简化版本的完整材质。

修复了已知的多种崩溃和漏洞。

如需详细了解Substrate及其试验阶段信息,请访问Epic开发人员社区论坛。

DX12 PSO预缓存

5.1中引入了新的PSO预缓存机制。这是一项试验性功能,可以改进基于DX12的产品中的PSO卡顿。5.2中对此系统的改进包括:

我们提高了系统的性能和稳定性。之前有各种特殊情况需要处理。

现在,如果对象的PSO尚未准备好,我们会跳过该对象的绘制。系统的目标是确保绘制前PSO准备就绪,但无法保证这一点始终实现。如果迟迟没有准备好,现在可以跳过绘制对象,而不是等待编译完成(和卡顿)。

我们改进了逻辑,避免了那些从不使用的PSO,从而减少了预缓存的PSO数量。

我们改进了老版(手动)的PSO缓存系统,使其可以与预缓存一起使用。

路径追踪器

在5.2中,路径追踪器填补了其与光栅渲染器在类似功能上的多个缺口,并新增了此前只在离线渲染管线中可用的多项功能。

在路径追踪器中,次表面着色现支持散射各向异性,并支持基于"平均自由程(Mean Free Path)"参数和贴图驱动的次表面颜色。

增加了网格体贴花支持,并提高了贴花的总体性能。

增加了对样条线网格体的支持。

增加了对光源中的高光度比例值的支持。

现在可以选择将玻璃的反射率(菲涅尔效果)与控制光线穿过玻璃时如何弯曲的折射率解耦。

增加了使对象对摄像机光线不可见(但对全局光照/阴影可见)的功能。

增加了将对象作为"空洞/剔除物"(holdouts)渲染而不更改材质的功能。

增加了Path Tracing Ray Type Switch节点,以便在材质图表中按照路径追踪光线类型进行过滤和筛选。

基本光照通道(有时称为AOV),其中包含漫反射、高光度、间接光照等,现在可以单独渲染。这些通道不会在每次渲染中自动获得,必须单独渲染。

我们增加了主射线可见性开关,可以处理投射阴影(Cast Shadow)、隐藏阴影(Hidden Shadow)、影响动态间接光照(Affect Dynamic Indirect Lighting)和隐藏时影响间接光照(Affect Indirect Lighting While Hidden)等设置,并且可以切换主要可见性以禁用可见性(Visibility)、启用隐藏阴影(Enable Hidden Shadow,)和隐藏时影响间接光照(Affect Indirect Light While Hidden)。

你可以使用全新的Enable Path Tracing蓝图节点,在运行时切换成路径追踪。

如需详情,请参阅路径追踪器。

虚拟纹理

虚拟纹理包括以下改进和功能:

我们为 Runtime Virtual Texture Sample 节点添加了反馈选项,用于禁用在可见虚拟纹理页面中流送的请求。

例如,当草地材质需要对地形的运行时虚拟纹理采样时,你会使用此选项。此时,地形通常会驱动虚拟纹理更新,而你需要让草地采样的Mip和地形上的相同。使用此选项可防止草地采样的Mip等级超出必要程度。

我们添加了通过右键菜单中的 资产操作(Asset Actions) 选项导出所有UDIM的功能。可导出为单独的UDIM纹理块。

如需详情,请参阅虚拟纹理。

阴影渲染强化

对光线追踪阴影的改进包括:

对于矩形光和光源大小为原始大小的光源来说,光线追踪阴影现在更准确,并更贴近路径追踪器中的结果。

(从左到右)旧的矩形光阴影,新的矩形光阴影,路径追踪矩形光阴影。

如需更多信息,请参阅硬件光线追踪。

虚拟阴影贴图的改进包括:

在拥有大量局部光源的场景中,"远距离光源(Distant Light)"的实现能极大降低阴影渲染成本。

单通道虚拟阴影贴图(Single-pass Virtual Shadow Map)的阴影投射实现了阴影采样阶段的相同效果(后者对当前GPU的利用还不足)。所有局部光源的虚拟阴影贴图都会在单个通道中进行投射,以优化性能。

如需详情,请参阅虚拟阴影贴图。

材质改进

材质编辑器获得了以下增加和改进:

我们增加了 Switch 节点,可更轻松地在不同纹理类型之间切换。此节点接受所有输入,并减少了让多个节点反映每种类型的纹理取样器的开销。

我们为材质增加了 最大世界位置偏移置换(Max World Position Offset Displacement) 设置,解决了世界位置偏移导致的剔除和自遮挡问题。利用该设置,你还可以限制允许的偏移量,这对于分配给Nanite网格体的WPO材质很有用。

我们增加了跳至材质图表中的错误的功能。

材质编辑器的注释块现在有蓝图中同等的功能:

注释气泡可以在缩小时显示。

注释气泡可以带颜色或不带颜色绘制。

注释块可以对表达式分组,也可以是独立的。

时序超分辨率相关的改进/优化

时序超分辨率包含以下更改:

当引擎可扩展设置的 抗锯齿(Anti-Aliasing) 设置为 Epic 时,屏幕百分比设置为200。

可以通过 Scalability.ini 配置文件中的 r.TSR.History.ScreenPercentage=200 来定义该设置。

TSR现在可以重新投射比像素还薄的静态(非绘制速度)几何体细节。默认情况下通过 r.TSR.Subpixel.Method 2 启用。

详情请参阅时序超分辨率。你还可以在EDC论坛的TSR反馈话题(TSR Feedback Thread)中给开发团队留下反馈。

曝光改进

曝光包含以下改进:

我们为局部曝光的高光/阴影对比度添加了单独的控制选项。

我们将废弃眼适应纹理,转而使用眼适应缓冲(虚幻引擎5.3将删除前者)。

我们增加了对基于亮度计算曝光的试验性支持。

如需详情,请参阅自动曝光。

硬件光追工具强化

我们初步实现了在运行时的光线追踪开关切换。此为试验性功能,尚不支持所有几何体类型。

新增一种可视化调试模式,可显示所有重叠的光线追踪实例( 光照(Lit)> 光线追踪调试(Ray Tracing Debug)> 实例重叠(Instance Overlap) ),以便对光追场景进行诊断和优化。它从GPUScene读取对象信息并用方框显示(不包括动态实例)。此模式适用于所有平台,可由美术师在编辑器中使用。

现在我们支持内联光线追踪通道的异步计算。

如需更多信息,请参阅硬件光线追踪。

多视图优化

在虚拟制片中,性能可能受限于CPU渲染线程时间,也可能受限于GPU时间。因此,确保舞台上的多视图和多GPU渲染始终保持高性能很重要。

在此版本中,我们在以下方面进行了优化和改进:

多视图光线追踪

提交线程优化

跨GPU延迟(支持Niagara)

减少引擎开发版本中的CPU和调试代码开销。

次表面散射改进

次表面散射包含以下改进:

改进了人类皮肤的粗糙表面渲染。

使用材质编辑器中的 Subsurface Medium 输出节点添加了路径追踪的各向异性次表面散射。

渲染资源查看器工具

渲染资源查看器(Render Resource Viewer) 可以显示GPU显存的完整分配情况,用在了什么地方,例如顶点缓存区和索引缓存区,以及产生这些开销的来源有哪些,例如静态网格体和骨骼网格体。这让美术师和开发者能够知道如何优化GPU显存,从而确保其项目的渲染性能预算在预期范围内。

渲染资源查看器包含:

编辑器以及交互式UI,可显示每个渲染资源分配情况,包括名称、大小、类型、标记和所有者。

一张可以排序和筛选的分配表。

清晰的信息视图,可识别和了解哪些资产在进行分配。

着色器编译改进

有时,着色器编译会频繁发生,这对需要加载编辑器、打开贴图、启动PIE的开发人员和美术师来说,有很大影响,并且对项目编译的影响也很大。这个方面我们会持续开发和改进。

此版本改进包括:

我们实现了新的着色器预处理器,可使着色器预处理速度翻倍。此功能默认启用。

我们减少了在DDC中缓存着色器因为非确定性问题带来的冗余编译。

打开由Epic Games发布的示例项目和模板时,你无需再等待着色器编译,因为对于随引擎发布的项目,我们已经修复了着色器的DDC缓存问题。

我们增加了对着色器编译器工作(Shader Compiler Worker)进程使用Unreal Insights的功能。

现在可以更轻松地诊断崩溃,因为着色器编译器工作程序会捕捉异常并将其报告给主烘焙进程。

二级可变速率着色(试验性)

在UE 5.2中,我们将之前仅在XR设备上可用的可变速率着色(Variable Rate Shading)扩展到了桌面台式设备。它现在支持对比度自适应着色(Contrast Adaptive Shading)。这种新方法会分析前一帧,确定哪些区域可以按更粗糙的着色速率渲染,而不会在最终图像中产生显著的变化。桌面VRS为版本5.2的试验性功能,并将在后续版本中获得进一步的更新和改进。

对比度自适应着色+调试可视化器

我们增加了对对比度自适应着色的支持,你可以使用控制台命令 r.VRS.ContrastAdaptiveShading 1 将其启用。请参阅 ContrastAdaptiveImageGenerator.cpp ,了解可用参数的完整列表。

Nanite、光源函数、延迟贴花和屏幕空间反射现在受可变速率着色影响,在启用VRS时可能会降低这些功能的开销。

我们向VRS管理器增加了新的调试可视化器,以便开发人员可以实时查看它如何影响其场景,你可以使用控制台命令 r.VRS.Preview 进行切换。

在XR设备上,你可以同时启用新的对比度自适应着色生成器与现有仅限XR的注视点着色生成器,将两者一起启用。

音频 音频参数调制改进

我们优化了音频参数调制的一些编辑流程。

现在你可以完全在蓝图中设置调制管线。

你可以在蓝图中创建LFO和包络跟踪器生成器。

我们更新了蓝图节点,可生成更清洁、更易于阅读的图表。

现在你可以更快迭代,因为对活动声音路由的更改会立即应用(而不需要重启)。

要详细了解音频参数调制,请参阅音频参数调制文档。

新的MetaSound节点

我们扩展了MetaSound的节点库(MetaSound是我们的基于图表的高性能音频系统)。

Perlin噪点

低频率噪点

超级振荡器

评估波表

要详细了解MetaSound和新节点,请参阅MetaSound文档。

编辑器 - UI 本地化键调试改进

在UE 5.2中,本地化工具现在新增一个调试文化(debug culture),可用于在UI中显示本地化键。你可以在控制台或命令行中通过命令 -culture=keys 将你的项目设置为相关语言/文化。这将在正常文本的位置显示任何可本地化文本的本地化键。这有助于本地化QA找到格式不正确或翻译不正确的文本的本地化键,并在调试期间暴露未本地化的文本。

此外,有一个名为 Slate.LogPaintedText 的CVar,用于调试屏幕上的文本。将 Slate.LogPaintedText 设置为 true 时,当前在屏幕上绘制的文本将显示在日志中。如果将其与上面详述的键文化相结合,你可以在日志中看到完整的本地化键,而没有UI裁剪问题。

CommonUI的增强输入支持(试验性)

在UE 5.2中,CommonUI与增强输入系统的兼容性有限。此支持是试验性的,在测试和进一步优化之前,我们建议在生产中避免使用它。

要为CommonUI启用增强输入支持,请确保两个插件在你的项目中处于激活状态,然后打开 项目设置(Project Settings) 并找到 游戏(Game) > 常见输入设置(Common Input Settings) > 启用增强输入(Enable Enhanced Input) ,然后打开 启用增强输入支持(Enable Enhanced Input Support) 。

然后,你可以将增强输入操作映射到CommonUI的UI操作。请参阅将CommonUI用于增强输入,了解更多信息。

CommonUI文档扩充

此外,CommonUI文档现已包含关于输入管理的更多详情。我们推荐阅读该文档,更深入了解输入路由的工作原理,以及一些可帮助你在项目中微调CommonUI的工具。

可编写脚本的工具框架(试验性)

我们添加了一组新的试验性插件,用于将 交互式工具框架(Interactive Tools Framework) 公开给 蓝图(Blueprints) (BP)。通过创建 可编写脚本的交互式工具(Scriptable Interactive Tool) 基类的BP子类,你可以将自定义用户定义的工具添加到 可编写脚本的工具(Scriptable Tools) 编辑器模式。这些工具的行为与 建模模式(Modeling Mode) 中的工具相似之处在于:

它们是有权捕获鼠标输入的模式工具。

它们可以创建小工具。

它们可以被接受或取消。

此外,你可以通过标准细节视图,添加和显示工具属性(就像建模模式中的工具属性)。还支持使用委托响应属性更改。

可编写脚本的工具与 几何体脚本(Geometry Scriptin) 配对,可以实现复杂的建模和资产编辑工作流程。但是,你也可以将可编写脚本的工具用于与建模模式或几何体脚本不相关的简单功能。

要访问这些功能,请启用 编辑(Edit)> 插件(Plugins) 下的 可编写脚本的工具框架(Scriptable Tools Framework) 。

可编写脚本的工具(Scriptable Tools) 编辑器模式将显示在 选择模式(Selection Mode) 下。

建模 建模工作流程改进(测试版)

建模流程通常包含大量步骤,并会涉及各类交互操作。在UE 5.2中,我们继续引入了诸多改进,以便提高美术师的创作效率。

变换面板

我们实现了一个全新的 变换面板(Transform Panel),可精准地控制变换。通过与建模控件关联,它能赋予美术师对世界空间和局部空间的数值控制。该控件可在视口中显示,并可用于许多建模和UV工具。

现在,美术师可以准确地构建和扩展其模型,而不必依赖比例参考资产。

控件改进

不断改进的建模控件不仅增加了数字输入控件,还改进了以下内容:

可打开单个控件的编辑器偏好设置,与编辑器标准平移、旋转和缩放一致。

在本地坐标系中支持平移和旋转对齐。

这些控件选项可以在一个新的下拉菜单中,点击 建模模式快速设置(Modeling Mode Quick Settings) 中的齿轮图标访问。

控件功能的扩展为美术师提供了在 建模模式 下变换几何体的复杂控制。

了解更多关于建模模式和建模控件的信息,请参阅建模模式概述。

多边形编辑工具

PolyEdit中的插入边缘工具现在允许持续插入边缘。拓扑编辑的速度将大幅加快。

了解更多关于PolyEdit工具的信息,请参阅PolyModel类别。

接缝工具

创建UV是建模期间和之后的一个重要步骤,我们一直在坚持努力简化这一过程。在5.2版本中,UV编辑器中的接缝(Seam)工具提供了分割和缝制的选项。这允许直接在3D预览窗格中快速编辑接缝,使美术师的UV工作流程体验更加流畅。

了解更多关于接缝工具和其他UV工具的信息,请参阅UV编辑器文档。

模式工具(测试版) 抖动

我们将 图案 工具扩展了新的抖动属性。使用这些设置,美术师可以创造出更自然的重复和场景。 你也可以使用抖动设置,结合其他建模工具快速搭建关卡。

模式投射

此外,图案工具现在可以将生成的图案投射到世界场景中。你可以使用这种生成功能,将图案元素分布到地形上,或者其他网格体上。这个功能的实现可有效增加网格体细节,特别是大型网格体的细节。

我们还更新了 打包模式(Packed) 。现在考虑到初始缩放和初始旋转度,以改进边界内的打包效果。

渲染捕获烘焙工具(测试版)

在5.1中,我们在 建模模式 的 烘焙 类别中添加了渲染捕捉烘焙工具(Render Capture Baking tool),标记为 BakeRC。BakeRC会通过虚拟照片或渲染捕捉画面,借助多个原始网格体的数据,为某个目标网格体烘焙纹理。

对于5.2,我们更新了该工具,现在支持:

次表面颜色通道

不透明度通道

更高质量的纹理多重采样

此外,该工具还有新的 清理阈值(Cleanup Threshold) 选项,可帮助美术师去除由于不正确的遮挡测试造成的烘焙瑕疵。这些新功能可提高性能,缩短用户迭代时间。

几何体脚本(试验性)

几何体脚本(Geometry Scripting) 为技术美术提供了一个创建自定义建模工具和工作流程的工具包。 我们扩展了该功能,增加和改进了以下内容:

应用户要求,我们新增了 将枢轴点平移至位置(Translate Pivot To Location),以简化相对于本地枢轴点在控件中定位网格的过程。

Copy Mesh From Component 节点现在支持从 SplineMeshComponent 、 PosedSkinnedMeshComponents、SkeletalMeshComponents 复制DynamicMesh(处于当前变形状态)。

我们实现了几个用于创建和查询变换的工具类函数。

我们增加了一组函数,用于对网格体顶点属性进行重心三角插值,以及另一种计算网格体三角中某一点的重心坐标的函数。 通过这些函数,你可以很容易地对网格体属性进行采样,并用于其他用途。

Ray函数

Ray 工具函数会将 FRay 类型公开给蓝图,并增加了一个用于创建和查询Ray的函数库。 这些函数对于在蓝图中构建交互式用户界面特别有用,并且是为支持 Scriptable Tools 插件专门设计的。

Box函数

我们新增了 Box 工具类函数库,用于处理 FBox 对象 – 公开一个类似于现有C++ API的蓝图API。这类基本数学函数和节点可为用户节省大量时间,否则用户需要大量简单数学节点来实现各种常用运算。

骨骼权重

我们添加了一个小型函数库,用于操控蒙皮权重。通过现有的 Copy Mesh From Skeletal Mesh 函数, UDynamicMesh 对象可以从骨骼网格体资源中初始化,并支持皮肤权重。你可以查询和修改顶点的蒙皮权重,然后把它们写回骨骼网格体 – 这为你提供了一个小而实用的程序性蒙皮权重创作机制。

网格体表面采样

我们实现了一种新的技术来生成在任意3D网格上均匀分布的采样点。这种技术基于泊松点投掷算法(Poisson Dart Throwing),并保证如果在每个采样点和半径处放置一个球体,则不会有任何球体相交。支持均匀和非均匀间距。

该方法加入了以下新节点:

计算点采样(Compute Point Sampling)

计算非均匀点采样(Compute Non Uniform Point Sampling)

计算顶点加权点采样(Compute Vertex Weighted Point Sampling)

这些函数基于 GeometryCore 库中的新类 FMeshSurfacePointSampling 而创建。

了解更多关于几何脚本的信息和完整的节点列表,请参阅几何脚本用户指南和几何脚本参考文档。

动画 Sequencer 动画渲染队列中的控制台变量预设(测试版)

现在你可以使用 动画渲染队列(Movie Render Queue) ( MRQ )中预制的 控制台变量(Console Variable) ( Cvar )资产。在控制台变量编辑器中编写好后,你可以在MRQ中指定CVar预设,这会在渲染前按你预设的顺序应用CVar预设。此外,你可以用MRQ中的预设覆盖CVar。

子序列轨道改进

现在你可以在关卡序列中动态混合子序列,更好地控制广播和Gameplay期间的运行时播放。

现在你还可以将序列混合设置为使用 四元数插值(Quaternion Interpolation) ,以便在执行变换的混合时采用姿势之间的最短路径。

动画轨道根骨骼运动改进

现在,借助 混合根骨骼的第一个子项(Blend First Child of Root) 属性,混合根骨骼运动动画序列(Blending Root Motion Animation Sequences)允许你混合那些根骨骼运动在根骨骼的首个子骨骼上的姿势。此外,应用根骨骼运动偏移时,操控器现在总是会在匹配的空间中工作。

分段颜色

现在你可以对Sequencer 镜头(Shots) 和 分段(Sections) 进行颜色编码,用于整理用途。

现在,使用混合镜头时,你可以将镜头和分段颜色编码用作调试工具。将颜色分配到镜头中的分段之后,你可以启用角色的骨架的调试渲染,这将相对于你的分段颜色对骨骼进行颜色编码。

帧标识改进

帧标识已改进,在时间轴中编辑序列时,更易于查看、选择和编辑。 现在你可以右键点击帧标识,访问包含属性和设置的上下文菜单,例如调整标识的颜色、添加注释、设置标识是否为 确定性栅栏(Determinism Fence) 。

此外,现在你可以多选帧标识以及其他Sequencer元素,进行批量编辑。

重定向 重定向Python支持

现在你可以实现自定义Python脚本,使用IK Rig自动执行和加快重定向过程。

重定向链的新映射工具

我们简化了使用IK Rig创建重定向链时的用户界面,弹出窗口更少,更多地依赖相对于你的源和目标角色的上下文按钮。

此外,现在你可以在源和目标角色之间使用确切的名称来映射重定向的链。

Control Rig Control Rig闭合样条线

在Control Rig中创建样条线时,现在你可以启用 Spline from Points 节点的 闭合(Closed) 引脚,从而创建 闭合样条线(Closed Splines) 。

Control Rig图表改进

ItemNameSearch 节点现在支持通配符引用。

使用Control Rig制作动画时,现在你可以在控制点上启用全新的 限制空间切换(Restrict Space Switching) 属性,从而限制空间切换。

现在你可以使用新的 Get Shape Settings 和 Set Shape Settings 节点,在使用 构造图表(Construction Graph) 生成流程性控制点时查询和设置控制点形状。

使用Control Rig制作动画时, 筛选的通道(Filtered Channels) 现在针对控制点支持按通道查看和设置关键帧。

现在你可以跳至 执行堆栈(Execution Stack) 中的具体说明。

动画蓝图 重新链接状态机

现在,你可以重新链接状态机中的过渡规则。将过渡箭头拖到新状态,所有过渡规则和逻辑将结转到新链接。你也可以对一些过渡规则进行多选,然后将过渡箭头拖到新状态,这将仅结转所选过渡逻辑,未选择的规则仍链接到之前的动画状态。

RigidBody节点警告

RigidBody动画蓝图节点现在将在链缺少骨骼时显示可视警告。

运行时 骨架兼容性改进

现在将在虚幻引擎中具有相同骨架结构的骨架资产之间自动识别骨架兼容性。适用时,你可以在具有相同骨骼结构的任意骨架资产之间共享资产,例如动画,并且你可以在资产选择属性中选择它们。

默认情况下,不兼容的骨架不会显示在资产选择属性中,你可以使用 编辑器设置(Editor Settings) 中的 允许不兼容骨架选择(Allow Incompatible Skeleton Selection) 属性或 设置(Settings) 菜单中的资产选择切换其外观。

此外,手动设置骨架兼容性现在是双向的。将一个骨架设置为兼容另一个骨架后,你可以共享任一骨架中的动画。

Rewind调试器改进

Rewind调试器(Rewind Debugger)现在可以单独为某个录制会话输出 追踪文件,从而方便整理数据并减少文件大小。

此外,Rewind调试器现在包含以下功能:

你可以使用新的属性监视轨道,将动画系统中的值作为Rewind调试器时间轴中其自己的轨道来隔离和观察。

现在你可以在使用Rewind调试器时切换角色的骨架的姿势观看调试渲染。

动画合成 ML变形器示例项目

现在你可以下载新的 机器学习(Machine Learning) ( ML ) 变形器示例项目(Deformer Sample Project) ,其中使用ML变形器系统展示了全身角色网格体变形。示例项目包含Control Rig驱动的动画角色的交互式过场动画,你可以针对ML变形器生成的变形来观察和比较线性蒙皮网格体播放。此外,你还可以使用替代动画、Control Rig编辑以及通过切换服装和皮肤可视性来操控角色,以便观察对网格体的实时更改,并详细了解ML变形器系统和功能。

你可以使用 虚幻商城(Unreal Engine Marketplace) 的 UE在线学习(UE Online Learning) 选项卡下载ML变形器示例项目。

ML变形器改进

机器学习(ML)变形器系统已得到极大改进,可使工作流程更快速、更高效,使结果的细节更丰富、更准确。我们做出了以下显著的改进:

神经变形模型的推理性能已大幅提高。在一些情况下,CPU端的速度提高至原来的20倍,现在通常每次更新仅需几微秒。

本地模式下的神经变形模型现在支持曲线。

增加了在神经变形模型的本地模式下对骨骼和曲线组的支持。这样可以在变形依赖多个骨骼或曲线的情况下实现更高质量的变形。

神经变形模型中的质量级别允许你将最大数量的活动变形目标设置为LOD的形式。不过,目前这仅适用于LOD 0。

平台 macOS开发要求

在macOS上运行虚幻引擎5.2的用户必须满足以下要求:

最低macOS版本: 12.5 Monterey或更高版本。

推荐macOS版本: 最新的MacOS Ventura。

最低Xcode版本: 14.1

这些反映了App Store的新增/后续最低要求。未来,macOS要求将反映iOS、tvOS和iPadOS的要求,确保我们的支持在Apple的各个平台之间保持一致。

对虚幻编辑器的原生Apple Silicon支持

从UE 5.2开始,Epic Games启动程序现在使用通用二进制文件(Universal Binary)发布虚幻编辑器的macOS版本。这些二进制文件包含x86-64和arm64架构的二进制切片,能为基于Intel的上一世代Mac和本世代Apple Silicon Mac提供原生支持。无论你使用哪一种,编辑器都将自动使用适合你的硬件架构的切片运行。Apple Silicon用户应该会体验到更少的处理开销,因为编辑器不再依赖Rosetta2来转换指令。

从源码构建虚幻引擎的Mac开发人员需要显式将其目标架构设置为x64+arm64,以使用通用二进制文件构建编辑器,因为Xcode将默认针对用户的原生架构构建。

在UE商城中支持Apple Silicon

从5.2起,在UE商城发布代码插件的开发人员需要使用通用二进制文件构建其插件,才能被视为兼容macOS。这将确保在极少进行版本管理的情况下,代码插件可以发布到所有Mac用户。

UE 5.2中的macOS限制

虽然原生Apple Silicon支持减少了处理开销,但总体macOS支持的工作仍在进行中。下面列出了目前在macOS上不支持或有限支持的功能:

Nanite依赖Apple硬件可能不支持的图像原子和正向进展保证。我们希望在未来启用此功能,但目前在macOS上不支持。

设置为使用Nanite的Quixel资产将回退到这些资产的非Nanite版本。否则,它们会按预期运行。

macOS上不支持头发/皮毛/Groom发束,但支持毛发发片和网格体。

macOS上不支持对Lumen的硬件光线追踪,这意味着Lumen将回退到使用仅限软件的光线追踪器。这意味着,相较于支持硬件光线追踪的设备,Lumen在Apple Silicon上生成的效果质量更低(例如,反射的细节更少,动态网格体在其中不可见)。

XR OpenXR面部锁定立体图层模拟支持

我们增加了基于面部锁定的立体图层模拟。现在,即便是那些不支持OpenXR (16) 中规定的最小图层数量的平台,也可以使用面部锁定的立体图层。

将 xr.OpenXRForceStereoLayerEmulation CVar更改为true,即可启用此设置。

XR设备可视化组件

我们引入了新的XR设备可视化组件,可将运动控制器(手柄)组件的可视化与其追踪部分解耦。这样你可以在项目中修改运动控制器的外观。

要激活此功能,你可以选择细节面板中的 可视化处于激活状态(Is Visualization Active) 复选框,或在蓝图中使用 Visualization Active 节点

XR创意框架插件的试验性支持

XR创意框架(XR Creative Framework)专为OpenXR而构建,允许你为XR设备构建编辑器工具。它支持立体渲染、头戴式显示姿势、运动控制台姿势和输入。它支持蓝图扩展,无需修改引擎代码或插件。这类工具可用于关卡设计、建模和动画。

VR通知组件委托支持OpenXR运行时

VR通知组件委托现在支持OpenXR运行时。

优化了实例化立体渲染和移动端多视图

我们优化了实例化立体渲染和移动多视图,预计Meta Quest 2上的GPU性能可提高大约5%。

对Meta Quest设备的WebBrowser控件支持。

我们增加了对Meta Quest设备的WebBrowser控件的支持。这包括支持通过WidgetInteractionComponent输入。

Vive追踪器的试验性支持

现在你可以使用OpenXRViveTracker插件,向你的XR项目添加对Vive追踪器的支持。如需详细了解如何设置Vive追踪器和OpenXRViveTracker插件,请参阅此开发社区教程。

手掌姿势扩展

OpenXR手掌姿势现在作为MotionController运动源可用。

移动端 移动平台开发要求和兼容硬件

下面列出了虚幻引擎5.2支持的移动设备所支持的操作系统版本和最低硬件。有关必要SDK和IDE的更多信息,请参阅平台SDK升级小节。

iOS、iPad OS和tvOS

UE 5.2支持iOS、iPadOS和tvOS设备,前提是这些设备的操作系统支持版本目标SDK 15或更高版本,并使用Apple A8处理器或更高版本。

下面是适用于UE 5.2的最低兼容设备型号:

iOS 15

iPhone 6S或更高版本

iPod Touch第7代

iPadOS 15

iPad第5代或更高版本

iPad Air 2* 或更高版本

iPad Mini 4* 或更高版本

iPad Pro(所有型号)

tvOS 15

Apple TV HD*

Apple TV 4K(第一代)

Apple TV 4K(第二代)

*Apple基于A8/A8X的设备(iPad Air 2、iPad Mini 4和Apple TV HD)需要一个可启用支持的项目设置。

5.2很可能是支持A8/A8X设备的最后一个版本。

有关必要SDK和MacOS版本的信息,请参阅下面的平台SDK升级。

Android

UE 5.2支持满足以下规格的Android设备:

Android 8或更高

64位基于ARM的CPU

兼容的GPU

Mali T8xx、G7x、G71x系列

Adreno 5xx、6xx或7xx系列

PowerVR GM9xxx

Xclipse 920

兼容的图形API

OpenGL ES 3.2

带兼容驱动程序的Android 10或更高版本设备上支持的Vulkan

有关必需SDK版本的信息,请参阅下面的平台SDK升级。

Android游戏开发扩展插件现需要JDK 17

Visual Studio的Android游戏开发扩展(AGDE)插件现在需要JDK 17。要使用它,请确保做到以下几点:

在计算机上下载并安装Microsoft OpenJDK 17。

在你的系统中添加一个名为 JDK_AGDE_HOME 的环境变量。

将 JDK_AGDE_HOME 的路径设置为 JDK 17 的安装路径。

请参阅为虚幻引擎设置AGDE了解详情。

适用于iOS、tvOS和iPadOS的Prepare for Debugging(测试版)

UE 5.2提供了用于iOS、tvOS和iPadOS的新 Prepare for Debugging 命令。之前,开发人员需要编译代码并烘焙内容才能继续打包项目,但Prepare for Debugging通过将之前烘焙的数据注入版本,跳过烘焙步骤,从而让此过程变得更加灵活。这对于程序员尤其方便,他们可以从UAT使用Prepare for Debugging,通过构建场生成的版本及其本地生成的可执行文件部署到设备内容,而不必创建编辑器版本。

要使用UAT访问Prepare to Debug,请使用命令 Turnkey -command=WrangleContentForDebugging -project=[你的.uproject文件的名称] 。你也可以点击虚幻编辑器中的 平台(Platforms) 下拉菜单,找到 iOS 或 tvOS ,然后点击 Prepare for Debugging 。

Prepare for Debugging在iOS中被视为测试版。你可以在安装了Xcode的macOS计算机上使用它,将 .ipa 中的烘焙据注入你的Xcode版本中,但它目前不能处理Windows上的远程版本。

移动预览改进

在UE 5.2中,我们引入了对虚幻编辑器中的移动预览模式的多项稳定性和准确性改进,从"设置(Settings)"菜单选择一个预览渲染关卡设备即可获得:

我们改进了更改预览设备时的稳定性。

使用编辑器中的"引擎可扩展性设置(Engine Scalability Settings)"窗口,现在会应用预览平台的可扩展性设置,将平台覆盖的所有可扩展性变量应用于编辑器视口。例如,网格体LOD过渡距离等依赖平台可扩展性ini文件中的覆盖的设置将正确预览。

目标预览平台的设备描述所设置的所有控制台变量现在将应用,因此编辑器视口应该会准确预览在设备上运行时会启用的一组渲染功能。

iOS、tvOS和iPadOS改进

UE 5.2添加了对iOS、tvOS和iPadOS上的以下功能的支持:

iOS和iPadOS的背景音频支持

背景音频现已在使用UE 5.2的iOS和iPadOS项目上受到支持。这样就可以在你切换到其他应用时继续在背景播放你的应用程序的音频。你可以在 项目设置(Project Settings) > 平台(Platforms) > iOS > 音频(Audio) 中使用标记为 来自此对象的音频是否在背景播放(whether audio from this plays in the background) 的设置切换此设置。

游戏手柄支持改进

我们对iOS、tvOS和iPadOS设备上的游戏手柄支持进行了以下改进:

游戏手柄现在可以与Slate UI交互。其行为类似于主机上的游戏手柄UI支持。

任天堂控制器现在适用于iOS、tvOS和iPadOS设备。这包括Pro Controller和Joy-Con Controller。

现在支持将鼠标用作输入设备。但是,没有硬件鼠标光标,你的应用必须渲染一个光标。

Gameplay Gameplay定位系统插件

Gameplay定位系统(Gameplay Targeting System)是一种创建数据驱动定位请求的机制。它在Gameplay技能系统插件基础上扩展,但可以在该功能之外使用。

你可以在编辑器中找到 编辑(Edit)> 插件(Plugins)> Gameplay > Gameplay技能(Gameplay Abilities)> 定位系统(Targeting System) ,启用定位系统。

定位系统使用 定位预设(Targeting Preset) 。 此定位预设是一种数据资产,定义了一组 定位任务(Targeting Tasks) ,这些任务针对执行的定位请求自上而下运行。

定位预设有一个功能是,每个任务都支持内联属性编辑。这意味着,你可以定义可复用的定位任务和预设,它们设置任务的行为方式,而不用为其中每一项定义UAsset。

请参阅Gameplay定位系统,了解该功能的完整文档。

力反馈资产

处理虚幻引擎中的力反馈(Force Feedback)资产时,每个平台对其振动电机或反馈系统的工作方式都有不同的实现。 力反馈资产现在支持按设备覆盖值。

这是一个抽象层,为用户提供了为每个平台设置不同反馈设置的方法。例如,你可以将强振动应用于Xbox控制器,而将更详细、精细的振动应用于PlayStation控制器。

你可以在力反馈效果和设备属性的 按设备覆盖(Per Device Overrides) 分段中看到这些。

请参阅力反馈文档,了解更多信息。

设备属性

设备属性(Device Properties) 表示输入设备的不同物理属性,例如其光源颜色显示或触觉扳机阻力。若要激活设备属性,你可以从 迸发(Burst) Gameplay提示通知蓝图(Gameplay Cue Notify Blueprint) 或从 输入设备子系统(Input Device subsystem) 添加到"设备属性"类别中的现有力反馈资产。

设备属性具有简单的生命周期,使用虚拟函数公开,供你进行自定义。每个设备属性都有一个 时长 ,与力反馈效果的时长属性相同。属性经历 激活 、 求值 、 应用 阶段,然后在达到其时长后 重置 。

你可以根据所拥有的武器类型让扳机具有更多阻力,或随着时间的推移更改光源颜色,实现特殊效果以及其他Gameplay可能性。

设备列表由配置文件填充,因此第三方供应商可以添加其自己的设备作为选项。默认情况下,我们支持每个主机。找到 项目设置(Project Settings)> 输入(Input)> 平台设置(Platform Settings)> (平台) > 硬件(Hardware) ,你可以在编辑器中看到这些配置设置。

例如,PS5可以使用DualSense或DualShock4作为选项。

请参阅设备属性文档,了解更多信息。

对比工具

你可以使用 UE对比工具(UE Diff Tool) 比较虚幻引擎中的资产。它支持将资产与源码控制中的之前版本比较,并支持比较两个不同的资产。当前支持适用于蓝图和蓝图相邻类型。

如需将两个资产相互对比,请找到内容浏览器,选择两个资产,然后右键点击并在上下文菜单中选择 对比选定项(Diff Selected) 。

对比工具包含将本地资产与特定源码控制修订版对比的选项。请参阅UE对比工具页面,了解此功能的完整文档。

检查工具

你可以使用 UE检查工具(UE Review Tool) 列出搁置或提交的变更列表中的所有资产。使用UE对比工具时,检查工具将用于检查这些资产。目前,检查工具仅支持用于Perforce。

人工智能 状态树

我们在UE 5.2中对StateTree做出了多项改进。

StateTree现包含 全局任务(Global Tasks) ,可用于运行在树开始和停止事件之间处于活动状态的StateTree任务。

当你需要某些永久数据来用于状态选择时,可以使用全局任务。例如,当日时间系统可以创建全局任务,以便确定当前当日时间。由于全局任务在树中的根状态之前启动,所以此信息将在树开始时以及第一个状态选择期间可用。

智能对象

我们在UE 5.2中对智能对象做出了多项更新。

智能对象集合不再自动创建。相反,现在你可以按关卡创建一个或多个集合来满足你的需要。

此外,现在智能对象加强了对世界分区和数据层的支持,同时还能完美地配合持久关卡使用。

[新增] 神经网络引擎(NNE)

现在你可以使用 神经网络引擎(Neural Network Engine) 插件在游戏中运行神经网络。

用户可以将ONNX文件导入项目并传递给插件,创建可运行的模型。此模型可以在CPU上运行,也可以压入堆栈并传递给渲染图表构建器,以便在GPU上运行。桌面平台和某些本世代主机都采用了此类方法。

此插件仍处于试验性阶段,我们会在未来引擎版本中继续改进,以便提高性能并支持更多平台。

要了解更多信息,请访问Epic开发人员社区上的NNE课程。

物理 机器学习布料模拟

虚幻引擎5.2对我们的机器学习布料系统做出了重大改进。

我们实现了以下功能:

自动姿势选择 :我们引入了一个新工具,可为最靠近的相邻数据集自动选择姿势,以便更轻松地微调机器学习模型。

更快的网络推理 :我们提高了网络推理(network inference)的性能,速度提高至之前版本的四倍。

更优的网格体变形 :我们引入了新方法来计算网格体变形,显著提高了模型准确性。

漏洞修复和UI改进 :我们进行了多项漏洞修复和UI增强,改进了布料模拟的创建过程。

[新增] Chaos Flesh模拟

虚幻引擎5.2引入了新的 Chaos Flesh(Chaos Flesh) 系统。此系统提供虚幻引擎中可变形(软)形体的高质量实时模拟。不同于刚体模拟,软形体的形状可以在模拟期间根据属性发生变化。

Chaos Flesh系统支持使用各种参数模拟静态和骨骼网格体,让美术师能够以前所未有的方式掌控最终结果。系统的主要重心在于模拟骨骼动画期间角色的肌肉变形。

Chaos Flesh系统通过在运行时模拟低分辨率几何体,以及高分辨率电影级质量几何体的离线模拟的缓存结果,实现高性能。

资产建模

作为模拟软形体的第一步,你必须将对象的表面表示转换为同一对象的体积表示。Chaos Flesh系统可将静态或骨骼网格体转换为其对应的四面体几何体表示,以在模拟期间使用。

系统支持以下情况:

闭合几何体的等值面填充四面体化,存储在静态或骨骼网格体表面中。

用于自动将闭合表面四面体化的 Tetrahedral Meshing in the Wild (Tet Wild) 算法。

从自定义生成算法四面体化。

四面体模拟

Chaos Flesh系统使用其生成的四面体几何体实时运行基于物理的模拟。

模拟系统支持以下情况:

基于物理的实时和离线四面体结构模拟。

模拟网格体的受约束动画顶点的运动学。

用于绑定不连贯的模拟几何体的弱约束。

设置按粒子模拟属性的功能。

与 场系统 集成进行按粒子属性初始化。

通过流程性节点图表接口编写资产。

世界解算器交互

Chaos Flesh模拟能够与环境实时交互。

这些外部交互包括以下内容:

与世界解算器对象的单向碰撞交互。

支持针对凸包和分析几何体的碰撞。

使用骨骼动画驱动受约束的四面体顶点。

用户可配置的相对于世界解算器的更新顺序。

针对静态世界几何体的表面光线投射。

可调整的碰撞性能。

渲染模拟

虽然四面体网格体是适合模拟的体积结构,但通常不是用于渲染的理想表面。由于主要关注点是让渲染表面看起来更理想,系统会将模拟结构传输到优化的表面进行渲染。

系统当前支持以下情况:

将模拟结果传输到骨骼网格体的变形器。

用于置换静态网格体几何体的世界位置偏移。

模拟网格体的四面体调试绘制。

缓存模拟

实时运行Flesh模拟的计算开销可能会非常高。为此,Chaos Flesh系统能够缓存模拟结果,以更流畅地在运行时播放。

系统支持以下功能:

在正在缓存的资产中捕获模拟结果以播放。

在游戏中将结果作为预先录制的变形播放。

在Sequencer中推移缓存结果,以针对过场动画事件计时。

使用"获取镜头试拍"和电影渲染队列(MRQ)渲染和模拟。

阅读Chaos Flesh概述文档,详细了解Chaos Flesh系统。

Niagara流体模拟

Niagara中的流体模拟在5.2中获得了重大改进。

更好的性能

在UE 5.2中,相较于之前版本,2D气体和液体模拟的速度提升了200%,3D气体和液体模拟的速度提升了高达60%。

此外,Grid2DCollection和Grid3DCollection的所有使用都比之前快得多。 请注意,对于3D网格,由于出色的内存管理,使用单个属性(浮点、向量等)的集合大幅提高了速度。

改进了易用性

我们更新了3D气体发射器,使其更强大,创造了功能更丰富的模板系统。

摘要视图和用户参数也已简化,使其对用户更加友好。

Sequencer缓存

所有流体模拟现在可以使用 Sequencer 和新的 Niagara模拟缓存(Niagara Sim Cache) 工作流程缓存。这样就可以烘焙(缓存)模拟,然后在Sequencer中擦除结果,使用电影渲染队列渲染它们,或在游戏中播放它们。

渲染改进

3D气体模拟现在仅使用异类体积渲染框架渲染。这样就可以使用任意数量的光源和几何体阴影体积

此外,此更新提供了轻松创作材质的强大方法,无需自定义代码即可编写材质。

常规改进

我们还对流体模拟进行了以下改进:

更好的碰撞效果 - 子帧准确碰撞(Subframe accurate collision)现已可用于刚性网格体碰撞DI。 这已集成到2D和3D流体模拟器中。

浅水模拟 - 更好地支持浅水模拟,能够支持网格体SDF碰撞,实现更平滑的效果,并提高了性能。

显著提高了3D流体的SDF平滑速度

Niagara 贴花渲染器

我们在UE 5.2中添加了新渲染器,即 贴花渲染器(Decal Renderer) 。它类似于贴花Actor,你可以使用贴花渲染器通过Niagara系统生成和应用贴花。贴花渲染器仅可用于CPU。

使用贴花渲染器生成贴花时,贴花会投影到它们与之相交的几何体上。这对于绘制等情况非常有用,绘制需要泼溅到表面上。

贴花不会显示在Niagara编辑器的预览窗口中,因此你需要将其应用到关卡编辑器中的某个表面上,才能看到效果。此外,如果你想通过Niagara系统更改贴花的颜色,可以使用新属性 DecalColor 和 DecalLifetimeOpacity 。如果你想让它们一起更新,还可以将它们关联到 ParticleColor 属性。

所有渲染器绑定应该会按预期工作。不支持动态参数。

使用贴花Actor渲染单独贴花的开销与通过Niagara渲染贴花的开销完全相同。但是,如果你想同时渲染大量贴花,通过Niagara渲染的开销更低。

如需了解详情,请参阅渲染模块。

Niagara模拟缓存(试验性)

我们提供了一个新的试验性插件,称为 NiagaraSimCaching ,可用于捕获和存储Niagara模拟结果,供以后复用。模拟缓存会保存系统、发射器和粒子属性的数据,例如位置和渲染信息。完整的缓存会存储所有属性,而渲染缓存仅存储与该缓存相关的属性。你还可以将一些数据接口保存到缓存,例如渲染目标体积。

运行Niagara模拟时,会发生一些小的变体。通过烘焙模拟缓存,可以让数据变得静态且可预测,这对于过场动画工作流程很有用,因为你需要在电影渲染队列中有可靠的结果。缓存模拟的结果后,你可以在Sequencer中拉取它们,或将数据加载到蓝图中,用于你所需的任意自定义用途。其他用法包括在运行时为常见效果创建优化的替代项以提高性能,为实时模拟生成准备工作,以便你可以一开始就拥有已经存在的粒子,以及调试游戏中表现不符合预期的系统模拟。

保存模拟缓存的方法有多种:

使用烘焙器

通过Sequencer

在关卡编辑器中

使用烘焙器

通过使用图像序列视图烘焙器并选择模拟缓存输出(试验性)的选项,以缓存模拟。如需更多信息,请参阅图像序列视图烘焙器。

此方法的优势在于,美术师若不熟悉Sequencer中工作方式,可以直接从Niagara保存其缓存文件。模拟缓存会保存为独立资产。这意味着,你可以在处理大型缓存文件时利用版本控制等功能。保存模拟缓存后,你可以在Sequencer中应用它,或使用蓝图中的数据。

通过Sequencer

你还可以直接在Sequencer中录制模拟缓存。具体方法是:

(推荐)在Niagara组件上插入缓存轨道并从中录制。

使用镜头试拍录制器录制。

在Sequencer中保存模拟缓存时,它会将其自动保存到序列,而不是保存为单独的独立资产。此方法非常适合执行快速迭代和捕获。

若在镜头试拍录制器( Take Recorder)中录制模拟缓存,会将Niagara Actor添加为可生成对象,而不是可持有对象。此方法的优势在于,你可以同时录制多个源和缓存。

在关卡编辑器中

你可以在关卡编辑器中录制模拟缓存。选择Niagara Actor,然后在"细节(Details)"面板的"Niagara工具(Niagara Utilities)"分段中,你会发现"捕获(Capture)"按钮。你可以在"项目设置(Project Settings)"的 Niagara > 模拟缓存(Simulation Caching)> 快速模拟缓存捕获帧计数(Quick Sim Cache Capture Frame Count) 下配置此捕获的长度。默认情况下,此捕获执行快速的5帧模拟缓存。

如需详细了解模拟缓存,请参阅Sequencer中的Niagara模拟缓存。

动态网格体数据接口

使用动态网格体数据接口在CPU或GPU模拟中构建几何体。你可以随意修改构建的几何体,可以每帧重新构建、修改三角形、修改顶点子集或仅构建一次。

使用动态网格体数据接口时,你可以每帧复制几何体。这可以在另一个发射器中按粒子实例化。例如,你可以创建分身效应,使角色动画有许多副本。目前我们仅支持每个骨骼网格体一个材质。

下面是Niagara内运行的步进立方体(marching cube)示例。一个发射器控制粒子球体,另一个发射器读取粒子以生成网格体。

为了使用动态网格体数据接口,你需要创建自己的自定义模块和模拟舞台。

改进了加载和编译时间

我们在UE 5.2的两个主要方面显著提高了Niagara的性能,一是加载Niagara系统所用的时间,二是从DDC读取之前编译的结果所用的时间。

以下情况下将加载Niagara系统:

首次在Niagara编辑器中打开资产。

加载包含Niagara资产的地图。

编译Niagara系统。

对于这些类型的操作,我们改进了一部分计算 PostLoad ,速度提高至原来的5倍。

除了加载方面的改进之外,我们还对Niagara系统的编译做出了以下改进。首次编译系统时,各种操作的结果会保存到派生数据缓存(DDC)中。这样一来,如果你选择编辑器并将其重新打开,然后再次执行相同操作,UE不需要重新编译Niagara系统。

在之前的版本中,从DDC提取数据的开销很大。在UE 5.2中,从DDC提取的速度提高至原来的4倍。对于包含许多Niagara资产的大型项目文件,差异尤其显著。

Niagara流体

关于Niagara流体的改进,请参阅物理分段。

Unreal Insights Insights编辑器

现在你可以使用Insights/Trace状态栏控件启动和管理Unreal Insights ,该控件位于编辑器右下角。

此新控件整合了控制追踪的功能,为你提供了新的用户界面,你可以在其中管理要追踪哪些通道,捕获追踪屏幕截图,插入追踪书签,或开始和停止追踪。

如需了解这些菜单功能的完整概述,请参阅Unreal Insights文档页面。

Trace

虚幻引擎5.2中对Trace Insights进行了多项改进。

我们已将屏幕截图通道添加到默认通道预设。

提供了新的控制台命令 Trace.SnapshotSend [] [] 。此命令将使用为主机和端口提供的参数,将当前内存中Trace缓冲区的快照发送到Trace存储。

在Trace分析期间,我们使用更好的内存管理优化了Trace。

我们提交了多项漏洞修复,包括范围限定事件的延迟连接功能修复。

Trace现在将来自Trace分析的错误反馈提供给应用程序。这些包括不支持的Trace版本的错误。

Timing Insights 计数器

我们为计数器数据添加了新的导出功能。你可以在"计数器(Counters)"面板的上下文菜单中找到这些新选项。

菜单选项

说明

导出...(Export...)

将选择(计数器及其聚合统计数据)导出到文本文件(制表符分隔的值或逗号分隔的值)。

导出值...(Export Values...)

将所选计数器的值导出到文本文件(制表符分隔的值或逗号分隔的值)。仅导出所选时间区域中的值(如有)或导出整个会话(如果未选择时间区域)。

导出操作...(Export Operations...)

将所选计数器的增量操作/值导出到文本文件(制表符分隔的值或逗号分隔的值)。仅导出所选时间区域中的操作/值(如有)或导出整个会话(如果未选择时间区域)。

导出计数器...(Export Counters...)

将计数器列表导出到文本文件(制表符分隔的值或逗号分隔的值)。

执行命令

在TimingInsights.ExportTimerStatistics执行命令中指定区域时,我们增加了对未知通配符类型的支持。

时序视图

现在你可以双击时序事件,重置其高光。双击空白区域也会重置高光。

运行时

我们修复了带有元数据的CPU时序事件在"延迟连接"会话中没有正确时间戳的问题。

我们为"LoadModule"增加了详细的CPU性能范围。

Memory Insights 内存分配表

在上下文菜单中增加了" 导出快照(Export Snapshot) "。这会将内存分配导出为csv/tsv文件,可以在表对比模式下将其导入。

表对比模式为试验性功能。

运行时

我们为D3D11和D3D12资源增加了内存分配追踪。

我们向Free和Heap追踪事件添加了调用堆栈。

Asset Loading Insights

增加了对Asset Loading Insights编辑器的支持。

树/表视图

向列标题的上下文菜单中增加了" 隐藏所有列(Hide All Columns) "的功能。

为两个内存分配快照增加了会话浏览器/表对比。

向会话浏览器下拉菜单增加了对比表和导入表。

内存分析器

UnrealFrontend的旧分析器及其运行时自UE 5.0起已废弃。

MemoryProfiler2工具和MallocProfiler运行时自UE 5.0起已废弃。

Datasmith Datasmith Solidworks导出器插件 Solidworks配置的支持

在Solidworks中,你可以使用配置在单个文档中创建模型的多个变体。现在你可以导出多个Solidworks配置,作为关卡变体集内的变体。

Datasmith Solidworks导出器可为你导出的每个配置导出单独的静态网格体。如果一些部分在一些配置中不可见,导出器会使用可视性切换开关将其隐藏。

Datasmith glTF导入器插件

完成过渡到交换glTF插件后,我们已在"插件(Plugins)"窗口中将Datasmith glTF插件标记为废弃。

交换glTF插件 导出器使用Actor标签

glTF导出器现在导出Actor标签而不是Actor名称。Actor标签在导出的层级中可提供更有意义的信息。

自定义扩展已删除

我们从glTF导出器删除了所有自定义Epic glTF扩展。对应的导出选项不再显示在导出选项对话框中。

删除的扩展

删除的导出选项

EPIC_blend_modes

材质选项(Material Options)> 导出额外混合模式(Export Extra Blend Modes)

EPIC_animation_playback

动画选项(Animation options)> 导出播放设置(Export Playback Settings)

EPIC_lightmap_textures

纹理选项(Texture Options)> 导出光照贴图(Export Lightmaps)

EPIC_texture_hdr_encoding

纹理选项(Texture Options)> 无有损图像格式(No Lossy Image Format For)

纹理选项(Texture Options)> 纹理HDR编码(Texture HDR encoding)

EPIC_hdri_backdrops

场景选项(Scene Options)> 导出HDRI背景(Export HDRI Backdrops)

EPIC_sky_spheres

场景选项(Scene Options)> 导出天空球体(Export Sky Spheres)

EPIC_level_variant_set

场景选项(Scene Options)> 变体集模式(Variant Sets Mode)

变体集选项(Variant Set Options)> 导出网格体变体(Export Mesh Variants)

变体集选项(Variant Set Options)> 导出可视性变体(Export Visibility Variants)

CAD导入

现在我们将CADKernel曲面细分引擎视为可投入使用。但是,它在默认情况下尚未激活。

在此版本中,我们对CADKernel进行了多项稳定性改进,包括:

删除重复表面。

沿iso曲线改进了网格化

能够在非常大的平面上绕过最大边缘长度设置。

我们还向Datasmith CAD平移器添加了新的控制台变量。 ds.CADTranslator.RemoveDuplicatedTriangle可防止在网格体中出现重复的三角形,即带有相同三顶点的两个三角形。复制表面补丁时,可能会出现重复的三角形。两个补丁有相同的网格体时,会在全局网格体中生成重复的三角形。

USD支持 资产缓存

现在你可以为你打开USD舞台时虚幻引擎生成并复用的资产创建缓存。若你处理的不同舞台使用相同的资产,那么使用资产缓存可缩短加载时间,因为虚幻引擎不必重新处理已缓存的资产。

你可以为项目指定默认资产缓存,或让虚幻引擎为需要资产缓存的每个舞台Actor创建一个新的资产缓存。为你的项目设置默认资产缓存后,用于打开舞台并且之前未分配资产缓存的每个舞台Actor都会自动使用默认资产缓存。

在首次打开项目中的USD舞台Actor时,虚幻引擎将提示你创建或指定默认资产缓存。你还可以从内容浏览器中的 添加(Add) 菜单( 添加(Add)> 杂项(Miscellaneous)> USD资产缓存(USD Asset Cache) )创建资产缓存,并从项目设置及其设为默认值。默认资产缓存(Default Asset Cache) 设置位于项目设置窗口的 引擎(Engine)> USDImporter 分段中。

USD资产缓存是你可以像其他资产一样从内容浏览器打开和编辑的资产。编辑资产缓存时,你会看到缓存中的所有资产,并可以为总是保存到磁盘的持久资产以及加载到当前会话的未引用资产(即使未使用)设置内存限制。

开发者工具 默认Visual Studio版本

Visual Studio 2022 现在是用于编译 虚幻引擎(Unreal Engine) 的默认Visual Studio版本。请优先选择以下Visual Studio 2022 (Vs2022)和Microsoft Visual C++ (MSVC)版本:

VS2022 :17.4.x及更高版本

MSVC :14.34.31933

虚幻头文件分析工具

我们删除了UE 5.1中废弃的C++虚幻头文件分析工具(UHT)。虚幻引擎现在使用UE 5.1中引入的C#虚幻头文件分析工具。

Include-What-You-Use工具

Include-What-You-Use Tool 现在已集成到 虚幻引擎 的 虚幻构建工具(Unreal Build Tool) 。Include-What-You-Use (IWYU)是在Clang基础上编写的命令行工具。IWYU按照与Clang相同的方式编译文件,但不输出对象文件。相反,IWYU会输出提供的源文件编译所需的 #include 指令列表。

要使用IWYU,请在Linux上构建你的目标并使用以下语法:

RunUBT.bat Linux Development -IWYU 基础 - 核心 虚拟资产改进

在UE 5.2中,我们向虚拟资产系统添加了多项用户体验改进:

虚拟资产离线支持(试验性)

为了支持可能需要长时间离线的用户,我们为虚拟资产系统添加了离线模式。要使用离线模式,你需要运行预缓存通道,将你的存储位置中的所有虚拟化数据下载到你的本地计算机,然后切换到使用本地缓存的后端图表,而不是连接到在线存储。目前,此功能被视为试验性的,因为它需要手动设置来创建支持它的背景图表。

自动修复未虚拟化的检查

在一些情况下,用户可能会意外将应该虚拟化的资产取消虚拟化。为了捕获这种问题,UAT现在包含了一个特定的脚本,可以在项目范围内重新保存和重新虚拟化文件。这样就可以为你的组织配置工作流程(例如在构建场中),确保资产得到一致的虚拟化。要运行此操作,请使用命令 -run=VirtualizationEditor.VirtualizeProject 。请注意,这不会重新保存程序包,并且需要使用虚拟化设置使项目的内容保持最新。

Clang静态分析现已可投入使用

在UE 5.2中,我们解决了5.1中Clang静态分析器的所有启用的警告。因此,我们会将Clang静态分析移出试验性状态,它现已可投入使用。

像素流

我们已注意到 Google 披露的 WebRTC 版本中存在的漏洞(更多信息请参见此处),并正在调查它对 EOS SDK 的影响以及接下来应采取的措施。

VR像素流送(试验性)

像素流送现在支持VR。你可以照常流送到Web浏览器,但现在如果你接入了XR设备,可以点击"进入VR(Enter VR)"按钮,在HMD中显示视频流。此外,系统会捕获HMD,并且XR控制器将其变换并传输回虚幻引擎,这意味着你只能使用像素流送和XR设备与启用VR的虚幻引擎应用程序交互。这样就可以打造零安装的XR体验,为虚幻引擎带来一系列的XR流送用例。

此功能在虚幻引擎5.2中为试验性功能,存在以下已知限制:

我们使用Quest 2和HTC Vive进行了测试,但并非支持所有XR设备。

头戴设备中存在网络延迟,因为没有实现预测或延迟缓解技术。这意味着,VR像素流送当前最适合本地设置。

你必须使用 -PixelStreamingEnableHMD 启动应用程序,才能执行实例化的立体渲染。

必须禁用OpenXR插件,才能使用PixelStreaming HMD。

要使用头戴设备内浏览器,例如Meta Quest浏览器,你必须将信令服务器配置为通过HTTPS提供内容。

多流送器支持

像素流送现在支持多个流送器连接到相同信令服务器,并能够在浏览器端选择你要与哪个流送器交互。这样就可以切换视点,流送本地多玩家体验,或同时运行多个像素流送VCam。

在消费者NVIDIA GPU上流送时,仅限于三个视频编码会话。如果你穷尽了所有会话,我们还实现了回退到软件编码的正常机制。但是,这会快速消耗你的CPU处理容量。在我们使用1080p流进行的测试中,在大部分现代系统上可以实现三个GPU编码流和一个软件编码流。

像素流送前端库

我们全面修改了5.2中的像素流送前端(.html、js、css),以迁移到现代Web开发实践,并使前端更易于处理、调试并作为构建基础。我们已将现有的庞大JavaScript文件转换为一组TypeScript类,创建了NPM软件包,并提供了一个遵循SemVer的API。我们还将核心功能从UI代码分离开,这意味着从5.2开始,我们将为前端发行两个NPM软件包。

Lib-pixelstreamingfrontend :WebRTC的核心像素流送前端、设置、输入和一般功能。

Lib-pixelstreamingfrontend-ui :用户可以选择在核心库基础上修改或应用的参考像素流送UI。

用户可以在核心库基础上构建自己的UI,或使用参考UI作为自定义的起始点。如需详细了解关于使用这些库或像素流送前端的一般信息,请访问官方像素流送基础设施Github仓库。

更新了像素流送演示

我们更新了 像素流送演示(Pixel Streaming Demo) 展示项目,包含基于新的像素流送前端库构建的新前端。它还包含带有伴随说明文本的特定功能展示。这将展示像素流送的功能,让探索新功能或首次使用像素流送的用户有更深入的了解。未来,此展示项目将升级,演示刚发布的新功能。

程序化内容生成框架(实验性)

流程性内容生成框架(Procedural Content Generation Framework (PCG)) 是处于早期开发阶段的工具集,用于在虚幻引擎内创建你自己的流程性内容。利用PCG,美术师和设计师能够构建任意复杂度的快速迭代式工具,从资产工具(如建筑物或群系生成等)到整个世界,不一而足。

PCG框架专为可扩展性和交互性而构建,可轻松集成到现有世界构建管线中,实际上模糊了流程性和更传统的工作流程之间的界限。

PCG提供了一个新的节点图表、一个运算符库和一个组件,用于生成内容并与世界中的数据交互。节点图表(Node Graph) 编辑器完全可交互,更改会实时更新,以支持实时工作流程。

如需详细了解流程性生成框架,请参阅程序化生成框架 文档。

虚拟制片 nDisplay SMPTE 2110支持

我们已将nDisplay系统更新为支持通过Nvidia Mellanox - Rivermax SDK使用SMPTE 2110标准。这意味着你可以输入和输出多个视频流,还可以将硬件设置用于nDisplay系统,其中每个内视锥可以由专用计算机渲染,以提高内容性能。

多进程和屏幕外渲染

这是新的群集配置方法,可改进nDisplay渲染节点中资源使用的并行化,这在很多情况下可提高有多个GPU的系统上的性能。

简而言之,配备多个GPU的PC可以运行无头渲染节点,它们跨GPU共享其渲染,以显示在同一个计算机上运行的面向节点。

其中,JITMR的全称为Just In Time Media Rendering(即时媒体渲染),这是媒体I/O框架中的新功能,玩家可以利用该功能,以便在尽可能接近需要帧的时间使用到达引擎的帧,这在nDisplay帧构成的情况下,接近渲染管线结尾。

群集PIE预览

现在你可以在"在编辑器中运行(PIE)"模式下预览nDisplay根Actor,以便你可以预可视化群集设置。

ICVFX iOS舞台应用

现在提供了iOS远程控制应用,可帮助你轻松控制许多常见的摄像机内视觉特效处理功能。从此应用,你可以将发光板、标记、色彩校正窗口和色键发片放置在LED体积的nDisplay渲染的实时交互式视觉预览上,执行色彩分级,并修改频繁变化的ICVFX属性。

色键发片

将绿色(或蓝色)屏幕放在体积中,并轻松定位,就像ICVFX编辑器中的发光板一样,自动采用nDisplay的色键设置的特征。

多用户仅接收模式

在多用户会话中,你现在可以将本地实例切换为仅从多用户会话接收更新。在仅接收模式下,你将接收更新,但你对场景所做的所有修改都不会发送到服务器。你可以使用该模式在本地做出更改,然后切换回默认或仅发送模式,并将你的更改填充到多用户会话。

虚拟摄像机 单编辑器多摄像机

我们已将WebRTC像素流送支持扩展到单个服务器中的多个同时指定的流,可从像素流送输出提供程序访问。我们还扩展了虚拟摄像机上的增强输入支持,以便你可以按虚拟摄像机选择接受的输入设备。这些更改一起提供了通过单编辑器实例操作多个同时虚拟摄像机的途径。

Live Link VCam应用

iPadOS和iOS的Live Link VCam现在支持在定位多流送服务器时选择目标流。我们还增加了对使用虚拟键盘与编辑器中流送的文本框交互的支持。

从虚拟摄像机构造轨道

VCamActor现在能够直接从VCam接口构造、编辑和环顾轨道,以执行预先规划的复杂摄像机移动。

长宽比适应目标设备

在使用像素流送连接时,虚拟摄像机现在会调整视口分辨率,以适应目标设备的相应长宽比。不必再调整视口大小或手动输入覆盖分辨率。

广播 渲染网格

新的渲染网格插件可帮助你轻松对MRQ作业渲染进行版本管理。你可以创建新的播放列表资产,并在类似于电影渲染队列面板的工作流程中创建作业。你可以将带有保存的属性值的作业分配给远程控制预设,这样你可以快速复制作业,并将同一个关卡序列动画用于不同的作业。

DMX DMX控制控制台

我们简化了DMX控制控制台,可更快地调试和快速控制物理和虚拟灯具。 现在你可以在输出控制台UI中选择DMX库和路径,使其自动填充滑块,这样它们可以立即用于生成DMX。

利用全局搜索,你可以快速在公开的控制滑块中筛选,这样你可以轻松找到要调整的属性。

DMX UI改进

现在DMX UI获得了以下改进,为现场演出设计师、虚拟制片操作员以及想使用DMX驱动编辑器中元素实时预览的人带来了方便:

批量添加灯具补丁

更新了命名规范(_OX而不是_X)

域的选择

灯具的复制粘贴数组

多选和移动灯具补丁

MVR导入选项

媒体IO 媒体IO缩略图和预览

媒体IO缩略图

现在你可以通过拖放一个或多个视频文件,为图像和媒体源资产生成缩略图。你可以决定视频的哪一帧成为缩略图。

视频预览

现在你可以双击文件媒体源、播放列表或图像媒体源资产来预览视频。

交叉过渡

媒体板Actor现在可以在媒体之间创建交叉过渡。组合使用多个媒体播放器,交叉过渡最多2(2x)个轨道。

颜色管线 工作颜色空间

工作颜色空间是项目设置,允许你向引擎提供信息,以便纹理输入和显示输出可以恰当地与所需的工作颜色空间之间转换。

OCIOv2改进

我们已将OpenColorIO插件库更新为版本2.2,其中添加了新功能,包括内置配置和对 .ocioz 压缩配置存档的支持。

对ICVFX发光板的OCIO支持

现在可以将OCIO应用于发光板渲染,这意味着可以在墙上正确表示其强度和颜色,并且可以选择将其与为摄像机执行的校正分开。

按Actor对色彩校正区域进行色彩分级的Nanite支持

色彩分级现在可用于特定Nanite Actor,以及区域/体积。这意味着你可以像操作传统内容那样隔离对所需Nanite内容的效果。

平台SDK更新

Windows

IDE:Visual Studio 2022 v17.4或更高版本

Windows SDK 10.0.18362或更高版本

最新Visual C++可再发行程序包

LLVM clang 14.0.1

.NET 4.6.2 Targeting Pack

.NET 6.0

构建场编译时面向的IDE版本

Visual Studio:Visual Studio 2022 17.4 14.34.31933工具链和Windows 10 SDK (10.0.18362.0)

Xcode - Xcode 14.2

GDK

Windows SDK: 10.0.19041.0

GDK: 2022年10月更新1

固件版本:恢复时间为2022年11月 10.0.22621.2864

支持的IDE:Visual Studio 2022

Linux

原生Linux开发

推荐操作系统:Ubuntu 22.04或CentOS 7

编译器:clang 15.0.1

跨平台开发

交叉编译工具链:v21基于clang-15.0.1 (CentOS 7)

macOS

推荐

最新macOS 13 Ventura

最新Xcode 14.1或更高版本

最低

macOS 12.5 Monterey

Xcode 14.1

iOS / tvOS / iPadOS

推荐

最新macOS 13 Ventura

最新Xcode 14.2或更高版本

最低

macOS 12.5 Monterey

Xcode 14.1

支持的目标SDK版本:iOS 15或更高版本

图形API:Metal 2.4和Metal 3.0

Android

Android Studio 4.0

Android NDK r25b

Android SDK

推荐:SDK 32

用于编译UE的最低版本:SDK 30

在设备上运行的最低目标SDK:SDK 26

如果你使用AGDE调试,需要AGDE v23.1.82+。

AGDE需要使用JDK 17。我们推荐使用OpenJDK 17。

ARCore

1.22

ARKit

4.0

Oculus

33.0

OpenXR

1.0.22

Steam

1.47

SteamVR

1.5.17

Switch

SDK 14.3.0或15.3.0 + 可选的NEX 4.6.7

最低固件版本:14.3.0-1.0

Nintendo Dev Interface 2.5.5

支持的IDE:Visual Studio 2022(SDK版本15.3.0),Visual Studio 2019(SDK版本14.3.0)

PS4

Orbis SDK 10.008.011

系统软件10.010.001

支持的IDE:Visual Studio 2022

PS5

Prospero SDK 7.00.00.38

系统软件7.01.00.00

支持的IDE:Visual Studio 2022

版本说明 Animation

New:

You can now relinking State Machine transitions in the AnimGraph. Additionally, you can make selective relinks by multi-selecting a subset of the transition nodes.

You can now use per-bone blend profiles as overrides in Blend Spaces.

Added a new visual Blend Curve widget to replace the previous text-based solution. The new widget shows the selected blend curve and displays animate information while hovering over it with the mouse.

Shared AnimGraph State Machines transitions can now be used and referenced across hierarchy levels by their parent and child state machines.

Exposed more animation blueprint features to the animation blueprint templates to support the new expanded skeleton compatibility.

Unreal Engine will now prefer to use the physics asset of the currently displayed mesh instead of the one who's preview mesh matches the current mesh.

You can now add Animation Composite Assets to Motion Matching Database assets in order to select poses from them at runtime.

You can now set a limit to define the number of bone influences, per-vertex, below what the project supports.

You can use the BoneInfluencesLimit property to set a limit on each LOD of an asset.

You can also use the DefaultBoneInfluencesLimit property as a per-platform global default, that can be set from the Project Settings.

For example, you can enable Unlimited Bone Influences on a project while ensuring that meshes don't use more than 8 influences by default, even if they've been imported with more.

You can now toggle the Unlimited Bone Influences property as a per platform default, rather than having one global setting for all platforms.

Skeletal Mesh Assets now display their Max Bone Influences in the metadata tooltip that you can access by hovering over an asset in the Content Browser.

Additionally, you can now filter assets by Max Bone Influences.

Improvement:

Improved the accuracy of some comments about how the Support Ray Tracing setting on Skeletal Meshes affects their usage of the skin cache.

Deprecated properties have been wrapped with WITH_EDITORONLY_DATA in order to avoid runtime waste.

Crash Fix:

Fixed an issue that could cause a crash when duplicate blend profile indices are introduced, due to a virtual bone rename operation.

Bug Fix:

Fixed a bug that would display incorrect values for some Watched pin values in Animation Blueprints.

Fixed a bug that could cause LOD bones to not display correctly in the Animation Editor Viewport.

Prevented redundant node spawner actions from being registered for every loaded Animation Blueprint asset context in the editor.

Fixed a bug that could cause blend profile bone indices to go out of sync when virtual bones were deleted.

Gameplay

New:

Exposed Montage_GetEffectivePlayRate, which accounts for PlayRate * RateScale. You can use the new Montage_GetEffectivePlayRate to get more accurate Montage playrate as the current Montage_GetPlayRate returns only PlayRate, so it doesn't provide an accurate final play rate if the Montage asset has a RateScale that isn't 1.

You can now use new Property Tracks in the Rewind Debugger to isolate, watch and debug any recorded property in its own dedicated track in the Rewind Debugger timeline.

Added support for overlay icons to be displayed on the Rewind Debugger's Tracks.

You can now undo and redo changes made in the Pose Search Database editor.

You can now set the blend behavior of the Motion Matching node, such as blend Time, Mode and set driving Blend Profiles.

Added a new filter to the pose search Rewind Debugger track that you can use to hide invalid poses.

You can now preview Blend Spaces in the Pose Search Database editor.

You can now set a dynamic Play Rate Minimum and Maximum to control the playback of Motion Matching nodes.

You can now view a Pose Search Database's statistics, using the Database Statistics Tab in the Pose Search Database editor.

In the Rewinder Debugger, you can now open the currently selected object's blueprint editor by double-clicking its track in the object outliner.

When opening an asset or database from the Rewind Debugger's Pose Search track, the asset is paused and will match the time in the recorded gameplay segment, making it easier to inspect and debug assets.

Added new icons adjacent to assets listed in the Pose Search Database editor's Asset Tree panel to quickly show a database entry's state and properties.

Improvement:

The motion matching Pose Search Database editor's stability has been improved.

Performance improvements have been made to the Pose Search Database indexing.

Crash Fix:

Fixed an issue that could cause a crash when the Motion Matching Trace State search throttling was enabled.

Bug Fix:

Fixed a bug that could cause parallel indexing of Pose Search Database assets to not perform correctly.

Fixed a deserialization issue that could occur with a Pose Search Database index kdtree.

Fixed issue that could cause a bug while packaging Pose Search Database assets.

Fixed an issue that could occur when concurrently indexing a DCC Pose Search Database.

Fixed an issue that could cause a root motion enabled animation preview character to not start at the origin point when switching to a new root motion mode while the animation is paused.

Deprecated:

Removed the pose search EPoseSearchFeatureDomain.

Removed UPoseSearchSequenceMetaData.

Removed support for the Pose Search Database sequence lead in and follow up asset definitions.

You can now use Animation Composite assets with Motion Matching to set sequences of animations that must play in order.

Removed support for UPoseSearchFeatureChannel_Pose::SampleTimes.

Rigging

New:

You can now reorder elements of the rig in the Hierarchy view using drag and drop.

Added a new node to create an array of items out of a fixed item list.

When dragging and dropping elements in the Control Rig's Hierarchy view, the list wil auto-scroll when moving the cursor to the boundary of the view.

Added new graph nodes that you can use to get and set the rig's control settings during the construction event.

Added a new set of Control Rig Make nodes in order to use other variable values such as Vectors, Transforms, and more.

You can use the new hotkey command, Ctrl-G to Go To a specific instruction in the execute stack view.

Once a pin of a Control Rig template node is resolved, it will add a preferred type. This change is also reflected in the API, as once a template pin is resolved, it will not unresolved unless manually unresolving the node.

You can now use Anim Controls to drive other Control Rig Controls.

You can now select any Mesh that uses a compatible Skeleton asset, as a Preview Mesh.

Using the Skeletal Mesh Modeling Tools plugin, you can now use a utility function in the Content Browser to convert a Static Mesh to a Skeletal Mesh using a reference Skeletal Mesh asset and its associated Skeleton asset.

Several Improvements have been added to AnimToTexture:

Improved UpdateMaterialInstanceFromDataAsset by setting UVIndex, Animate, and NumBoneInfluences.

Renamed several Material parameters.

Fixed Static Mesh bounds.

Setting Static Mesh FullPrecisionUVs only to a given LOD.

Forcing PowerOfTwo for 16bit precision.

Added 16bit precision for Vertex Mode.

When creating Splines in Control Rig, you can now create Closed Splines by enabling the Spline from Points node's Closed pin.

Added the Deformer Graph source library DSL_Matrix which contains useful shared matrix functions.

Added the new experimental plugin, PoseCorrectives, that you can use to set up corrective pose behaviors. The new plugin contains similar functionality to the Pose Driver node but features a more interactive workflow.

Added the console command r.MeshDeformerMaxLOD that you can use to disable mesh deformers below a fixed LOD.

Added new Inline function bytecode to the Control Rig. Functions are now only compiled once and their bytecodes are inlined when function references are found.

You can now promote Control Rig node Pins to Interface Pins when inside a function or collapsed node.

Added a new half edge connectivity data structure that you can use in the Deformer Graph.

Improvement:

Control Rig Controls are now always selectable even if they uses a translucent material.

Buffer creation is now done per-instance at runtime.

Control Rig Components now tick the Post-Process AnimBP with the correct delta time instead of a zero delta time. Previously a tick with a zero delta time could cause any present Rigid body anim node in a PPABP to stop working.

Crash Fix:

Fixed a crash that could occur when loading a Control Rig with an invalid parent class.

Fixed a crash that could occur when exiting PIE when the Control Rig editor is attached to a Control Rig instance in PIE when debugging.

Bug Fix:

Fixed issue where AnimNode_LayeredBoneBlend was not updating the blend weights correctly when using a LOD Threshold.

The Deformer Graph Shader Text Editor now updates tab names according to the name of corresponding custom kernel nodes.

Custom Deformer Graph Kernel nodes now show the user-defined names in the graph.

Fixed the Curve Expression plugin's verify button in the Remap Curves from Mesh panel.

You can now copy/paste Custom Compute Kernel node's parameter bindings in the Deformer Graph.

Fixed a bug that could cause the Apply To Asset button to not save the preview mesh setting with Deformer Graph assets.

Fixed a bug that could occur when copying and pasting Deformer Graph nodes.

Runtime

New:

Exposed access to Curves, TickRecords and Graph Data from UAnimInstanceProxy.

Improved Animation Modifier Error Handling with Dll Export.

You can now batch apply modifiers by script to the FApplyModifiersScope object using Python or Blueprint Scripted Actions.

Added a new tree view for Animation Curves.

You can now use UseTreeViewForAnimationCurves and AnimationCurveGroupingDelimiters to enable tree view for curves in an Animation Sequence Editor Checklist.

Added additional settings in the Animation Editor and Timeline:

Unreal now supports multiple delimiters, which default to "._/|\".

Unreal now supports path compression, "A.B.C" and can be presented as one node instead of three if B is the only child of A.

Unreal now supports reused names for both curve & path. For example, curve "A.B" and "A.B.C" can exist at the same time.

Unreal now supports name collision with different delimiters. For example, "A.B", "A/B" and "A_B" can exist at the same time.

Additionally you can now access the Remove Curves & Edit Curves Context menu actions.

Added the ability to edit multiple curves simultaneously inside of the Animation Editor by adding/removing curves of interest

Added a new custom Animation Blueprint option for additional meshes in animation preview.

Added a setting for Animation Modifiers you can use to reapply the modifier post owner change.

Exposed the add_socket method to the SkeletalMesh class in Python API.

Added a new validation and visual warning to Animation RigidBody Nodes that will display a warning on the node in the AnimGraph if the referenced bones are missing.

You can now play Animation Composite assets in the Random Sequence Player node.

Exposed functionality on Blend Spaces to force snap to a passed input.

Added Blend Space player library to support editing blendspace players.

Manually set Skeleton asset compatibility is now bi-directional. Specifying a compatible skeleton A -> B, now implies B -> A.

Skeleton compatibility is now an editor-only concern. The runtime will attempt to match skeleton assets via name -> name mappings. Only the editor will prevent assigning incompatible skeletons, for example, in asset selection properties.

Skeleton compatibility checks in editor can now be disabled in the Editor Preferences, and each asset picker now has a filter toggle in its View Settings that allows you to see non-compatible skeleton assets.

You can now copy and paste data in the Animation Curve Viewer.

You can now use the Montage tracks in Rewind Debugger to observe montage data. Montage assets can also be opened by double clicking the asset in the track.

Improvement:

Improved Custom Attributes project setting naming.

MLDeformerComponent::FindSkeletalMeshComponent now returns nullptr instead of the first available SkelMesh in the event that no matching SkelMesh is found.

Skeleton Compatible is now determined using a more optimized IsCompatibleSkeletonByAssetString method that doesn't rely on the asset manager.

Several improvements have been made for LookAt AimOffset: You can now use ShowDebug Animation.

Input filtering is now accessible.

Allows the source or pivot to be a bone or socket.

Added an option to display filter categories as sections rather than submenus to SBasicFilterBar.

When browsing to assets by clicking hyperlinks in the Rewind Debugger Details panel, the tool will now navigate to the appropriate frame in a referenced AnimSequence, Blendspace or Montage (pausing playback on that frame), and will also set the BlendSpace X/Y Parameters in the editor preview after opening a blend space.

Blend curve rendering has been improved in the Rewind Debugger to both improve performance, and display overlapping curves more accurately.

Blend weights curves are now rendered as a bar graph, rather than a smooth curve, where the width of each bar is the duration of the frame.

If the same AnimSequence is playing in two different places in the graph with different blend weights, it will now display as alpha blended overlapping bars on the same frame; previously this behavior was rendered as a jagged curve.

The Rewind Debugger's eyedropper tool for actor selection, is now disabled when player control has not been ejected. Additionally, a tooltip has been added to explain that you must eject player control first, before using the eyedropper tool.

The Reset to Default operation in Blend Space axis Min and Max properties has been explicitly disabled because it causes various issues.

Crash Fix:

Fixed a crash that could occur when using the Pose Handler AnimBP node, where it was using the bone container without first checking if it was valid.

Fixed crash that could occur when a USkeletalMeshComponent is created as a DefaultSubObject of another component.

Fixed a crash that could occur when deleting a Skeleton used by a Skeletal Mesh Component instance, which also uses a post-processing animation instance.

Fixed an issue that could cause a crash when cleaning up invalid Blend Profile entries leading to OOB access when more than one entry is removed at once.

Fixed an issue that could cause a crash when splitting a post process settings pin on a Property Access node.

Fixed an issue that could cause a crash when selecting a curve after removing transform curves in an animation sequence.

Fixed an issue that could cause a crash by right-clicking a modify curve node in a template animation blueprint.

Fixed an issue that could cause the Animation Asset editor to crash when a preview skeletal mesh executes a raw delegate on an already destroyed preview mesh.

Fix a crash that could occur with the AnimationViewportClient, when the preview mesh has been destroyed before the client destructor has been called.

Fixed an issue that could cause a crash when accessing out of bounds notify index after deleting an Anim Notify in a montage.

Fixed an issue that could cause a crash when deleting an Animation Blueprint asset.

Fixed an issue that could cause a crash when deleting a curve then validating its asset post-save.

Fixed an issue that could cause a crash when using a Skeletal Mesh Component, when the Leader Pose Component is a Poseable Mesh Component.

Fixed an issue that could cause a crash when using the Skinned Mesh Component when overriding vertex colors or skin weights and then performing any change that rebuilds LOD information, such as changing the displayed mesh.

Fixed an issue that could cause a reinstancing crash when using a custom anim instance proxy as a linked anim graph.

Bug Fix:

API can occasionally suppress warning or error dialogs when applying modifiers from script. 'YesToAll' and 'NoToAll' will now not be respected when both error and warning are thrown from the same modifier class.

A bug was fixed that could cause an error when transferring Aniamtions Modifiers to a new Skeleton when the ownership of 'PreviouslyAppliedModifier' was from an animation modifier instance of the animation sequence being applied. Stateful animation modifier can now be reverted correctly (Applied modifier instance is no longer reverted after OnApply call)

Previously when transferring an Animation Modifier to a new Skeleton, the USkeleton would be dirtied everytime the modifier is applied to an animation sequence.

The CanRevert and OutOfDate status for the Animation Modifier on the Skeleton did not reflect the true status of all animation sequences referencing that skeleton.

CurrentAnimSequence/CurrentSkeleton was not set on OnRevert().

IAnimationDataController::FScopedBracket was not open on OnRevert() before re-apply modifier

Unreal will now consider Unreal Engine's Skeletal Mesh bone naming system when importing non-base-LOD Skeletal Mesh assets.

Fixed a bug that could cause Additive Transform tracks on an Animation Sequence to not be enabled/disabled.

Fixed a bug that could cause an error when using a BlendMask on a Layered Bone Blend node playing back on a compatible skeleton.

Fixed a bug that could cause the "Allow incompatible skeletons" property's state was not saved to config files.

Fixed a bug that could occur when mirroring Animation Attributes, that caused assigned bone indices to not be remapped correctly.

Fixed a bug that could cause CTRL+Z/CTRL+Y to not undo/redo changes to some Preview Scene settings.

Fixed a bug that could cause Animation Curve LOD settings to be lost when merging two (or more) Skeletons together.

Fixed a bug that could cause PoseAssets to not correctly be evaluated for compatible Skeletons due to bone index mismatches.

Empty tracks are now removed to ensure track key count is consistent with the data model.

Fixed a bug that could occur by protecting against a null source object when handling re-instancing in custom property nodes.

Fixed a bug that could cause Animation Notify States to be ended when CustomTimeDilation is set to zero.

Fixed a bug that could cause 'reachable garbage object' errors in anim BP thumbnail preview scenes.

Fixed a bug that could cause distorted meshes when assigning assets that rely on skeleton compatibility.

Fixed a bug that could cause index mismatch/out-of-bounds access when drawing bones using Pose Watch that doesn't use the full set of bones.

Fixed several truncation errors in the AnimationCore, SkeletonEditor AnimationBlueprintEditor, AnimationGraph, and AnimationGraphRuntime modules

Swapped ordering of 'Use Selected' and 'Browse to Asset' Skeletal Mesh asset context menu options to match the rest of the editor.

Fixed a bug that could cause Anim Notifies in a sequence to not be triggered when played on a slot node inside a linked animation blueprint.

Fixed a bug that could cause a Mirror Data Table asset to not automatically add sync markers during creation.

Fixed a regression that caused Anim Notifies from all the animations within a montage to be queued as standard notifies and skip the slot relevancy check before triggering the animation events.

Fixed a bug by adding a test of bone index validity in animation Pose Assets to avoid runtime failure in rare conditions.

AimOffsetLookAt and RotationOffset blendspaces now correctly validate for dynamic properties.

Fixed a bug that could cause irregular performance, by skipping updating compatible assets in the asset family shortcut bar, if the asset registry is still loading assets.

Fixed a bug that could cause Anim Sequence Curve colors to be reset to white.

Fixed a bug that could cause the Anim Timeline Trimming tools to create invalid key data.

Fixed a bug that could cause incorrect out-of-bounds access when using retargeting.

Fixed a bug that could cause OrientAndScale retargeting to not function properly in the presence of skeleton remapping.

Fixed a bug that could cause check() to not operate correctly when deleting certain configurations of Anim Notifies or Notify States.

Fixed a bug that could cause an error in the level of detail bone reduction calculation, as it was showing incorrect counts when performed from the Skeleton Tree.

Fixed a bug that could cause the BoneContainer's SetDisableRetargeting property to be ignored for packaged projects. SetDisableRetargeting now works in both editor and packaged projects.

Fixed a crash that could occur when generating thumbnails for cooked additive animations.

Fixed a bug that could cause a AnimNodeReference check assertion to not function properly.

Fixed a bug that could cause Animation Sequences to not trigger Notifies if the sequence preview is dragged all the way to the left of the sequence.

Fixed a bug that could cause out of range errors when using the Random Player AnimNode, due to precision rounding errors.

Fixed an issue that could cause a crash when using the AnimInstance display debug, when a montage ends while blending physical animation.

Fixed a bug that could cause Animation Attribute data to not update when reimporting data from the source FBX file.

Fixed a bug that could prevent the creation of a child animation blueprint via the content browser.

Fixed a bug that could occur when the leader-pose component was used in construction scripts, which could cause distorted meshes.

Fixed a bug that could cause attached actors such as weapons to not display properly while scrubbing in Rewind Debugger

Fixed a bug that could cause debug data to disappear in the Rewind Debugger when Animation Blueprints are updated and compiled during a single PIE session. Now, debug data will still display correctly, but data will be listed as a new AnimInstance track, with new sub-tracks for Blend Weights, each time you recompile.

Fixed a bug that could cause a sync group's start position to be ignored.

Fixed a bug that could cause copy and paste functionality in Blend Space axis Min and Max properties to not operate correctly.

Fixed a bug that could occur in the Rewind Debugger that caused the debug components and tracks for the selected Actor to be filtered out based on incorrect lifetime information.

Removed:

Disabled 'resync to sync group' functionality for sequence and blend space evaluators, as they generally should be driven with explicit time.

Dragging functions into the Animation Blueprint from My Blueprint is now disabled, as the functions are not usable in the Animation Graph.

Sequencer

New:

Added sub-components support when constraining an actor with Skeletal Meshes to be consistent with the attach track workflow.

Added an option to the ObjectID pass to decide whether or not to include transparent objects. If included, they will write to the ObjectID pass as opaque pixels.

Camera Cut Track section now has more information when a camera cut is not found.

Instead of just showing no label it will instead specify if there is no binding specified, or if there is a binding specified it will say that the binding/object cannot be found.

Added a simple auto-completion widget to the Config Editor UI that will helpfully suggest possible format tokens when you type a "{" in the File Name Format field. This doesn't change which tokens are supported and this does not work in the Output Directory path (as it already has a customization). This also enables support for double-click selection in the footer text and allowing copy/paste from the footer as another way to get the format tokens.

Media tracks can cross fade in Sequencer.

Added axis filters for translation, rotation, scale, and parent constraints to specify what axis it operates along.

Added native accessors for common float/color light properties to improve performance when setting them after sequencer evaluation.

Holdout and visibility flags can be controlled by sequencer/blueprints.

You can now toggle an autocomplete property for console variable entries in the Console Variables setting.

Added new Console Variables Editor presets to the "Console Variables" setting. You can use any number of presets with your project.

Added a new filter button to the Sequencer Content Browsers.

CameraRig_Rail private methods and properties have been made protected so that the child class has access.

Take Recorder now records using auto keys.

NLA now exposes the Start Offset for Translation and Rotation, and also exposes the Skeleton to Blueprints and Python.

You can now use new Sequencer commands for key context menu items, such as Set Key Time, Rekey, Snap To Frame, and Delete.

You can now assign a color tint to Sections in Sequencer, which will be blended with the track color.

Added a menu to set a Section's color tint from a list of user-defined color tints to the Project Settings.

Skeletal Track Editor's skeleton color for the animation clips are now based on the section color if defined. Otherwise, it defaults to the original hardcoded colors.

You can now view a Seqence's Frame Count and Duration using a new display.

The MRQ UI now allows CVars to be toggled. By hovering over a CVar property a tooltip will be visible that describes the CVar's functionality, as well as a value resolution tooltip to indicate where the CVar value originated such as the startup value, the preset value, and the value set in MRQ.

When using CVars with MRQ, the Console Variables settings will now display a UI warning if the sequence having its settings modified has at least one CVar track in the Sequence. Sub-sequences will also be searched for CVar tracks. For the warning to display, the CVar track must not be muted, and contain an active section that contains set CVars.

You can now register additional film overlays for Level Sequence assets.

You can now Group Sequencer properties using the property in (+) Track menu by their defined Category, if it exists.

The Window > Cinematics > Sequencer menu item is now always clickable. If there is an existing Sequencer window, the Editor will focus your view to it when the menu item is clicked.

The Console Variables setting now displays a read-only view of the CVars within each CVar preset that has been selected.

Sections will now be cleared when a control is deselected, otherwise they may not be deselected in the non Sections To Key.

You can now use the new CVar, ControlRig.Sequencer.SelectedSectionSetsSectionToKey in order to set the section to key based upon the current selected key area.

The CVar is set to false by default.

Added the new SetSpawnableBindingID() which allows you to possess a spawnable binding from python/blueprints.

Added the new GetSortingOrder() and SetSortingOrder() to get and set sorting order for bindings through python/blueprints.

Pasted object bindings now operate more dynamically based on user input.

If there is no existing binding in the sequence being pasted into, the pasted binding will be bound to the original object. If there is an existing binding in the sequence being pasted into, a menu will prompt the user to select one of the following options:

Duplicate: Which will duplicate the bound object, resulting in a duplicated copy of the object with its associated bindings and tracks.

To Not Duplicate: Which will unbind the object, indicated with a red color in the UI. You can then rebind the object to a new parent object.

Added a new option to Reset Playhead When Navigating which resets the playhead to the start of the playback range when navigating in and out of subsequences.

Added a new AudioAssetName property to the Take Recorder's settings, that you can use to format the name of the audio asset file that is recorded. The default naming convention will use the following format: Audio_{slate}_{take}.

Added generic support for hierarchical easing on sub-sequences, and dynamic weighting on level sequence players

This new feature allows seamless blending between sub-sequences using the familiar overlapping ease ranges. Blendable tracks contained within each will naturally blend together in the transition range.

A new API exists for specifying the global weight of a sequence, allowing completely different Sequences to be blended together using gameplay code.

Added Curve caching to the Curve Editor so curves are only recreated when something changes for massive speed ups.

You can now set the Additive From Base blend type to byte, integer, and perlin noise channels.

Added a new Quaternion (Slerp) blending algorithm for blending transform tracks using a 'shortest path' rotation.

Tracks that support multiple blending methods will now have a Blending Algorithm sub-menu within their context menu, which is used for choosing which blending method to use between assets.

Added the ability to assign console variable collections to console variable tracks.

Added the ability to set FK Control Rigs as Additive in both Python and Blueprints.

Add a new tooltip for track outliner items that shows property binding information.

Added new APIs to allow top-level channels to do extra drawing.

Improved the Seqeuncer's skeletal mesh animation track to run with the new ECS-based evaluation.

Added function to the Constraint Python and Blueprint APIs for adding, keying, and compensation.

Improvement:

MRQ has been updated with an overall streamlining of queue save and load workflows, similar to what was done for configuration presets.

You can now assign multiple characters for the generated Shot or Take naming property. For example, you can now define a take separator as _v so that the shot name can be generated as, MyShot_v001.

Numeric sliders in Sequencer now correspond with property metadata so that the behavior in the key editors is identical to the Details Panel.

Improved the context menu operations, Pre and Post infinity Extrapolation, Interpolation and Reduce Keys. These properties now affect only the selected channels, when channels are selected, rather than all channels of the section.

MRQ preset workflows configuration has been streamlined. The editing dialog now indicates the name of the preset being updated, and provides "Save" in addition to "Save As" options.

Renamed CinePrestreaming to CinematicPrestreaming to match the Cinematic Prestreaming plugin's convention.

The mutual component inclusivity API has been improved to provide a robust framework for defining mutually inclusive component types.

Fade tracks are now converted to ECS evaluation.

Template sequence menus are now only displayed on Actor bindings, and not on component bindings.

Marked frames in sequencer have been improved with a revamped look, improved UX, the ability to add a marked frame to the selection, and can be commented on using the Comment field.

ECS evaluations have been improved by performing a series of basic checks before dispatching tasks to determine if there are any irrelevant operations.

Fixed a bug that could cause issues when working with rigs that have the root animation at some bone beyond a direct child. The operation now searches the rig for the first bone with animation on it which enables the use of non-zero roots.

Now, when manipulating a root bone offset in the edit mode, edits must be made in the space of the start of the section, since that's the space that the edit is being performed.

The color of perlin noise curves has been changed, since the background color of sequencer sections has changed.

The ECS evaluation of perlin noise channels now uses the new EvalSeconds component.

A key's default Interpolation type will now be based upon the previous key set, rather than the default setting. The default setting is only used when setting the first key.

Tangents will now be modified to follow the curve when user or broken keys are set in Sequencer.

The Time Undo operation is now controlled by Sequencer using the TimeUndo Console Variable.

Channel evaluations have been optimized using a cached interpolation component.

During stress tests this improvement saves roughly 60% of evaluation time by removing indirection and increasing cache utilization.

This can be disabled or enabled with the Sequencer.EnableCachedChannelEvaluation console variable, which by default is enabled.

Added several new functions and improvement to Constraint Scripting:

Added a new function to remove Constraint in the Constraint Manager.

Exposed the CreateTransformableHandle to Control Rig.

Added the new TimeUnit to MoveConstraintKey, Compensate, and SetConstraintActiveKey so you can use display time.

Added the new GetConstraintKeys that will return an array of times and bools.

Set disabled styles for transport control buttons.

Crash Fix:

Fixed an issue that could cause a crash when removing keys on mouse up in the Curve Editor. Now insurance is made that the key handles are unique to prevent this issue. Additionally, a check is made to ensure the last dragged keys are up to date on mouse up.

Fixed an issue that could cause a crash when the Deferred Rendering setting has the Add Default Layer property enabled, but no stencil layers are supplied. This condition now generates an error.

Fixed an issue that could cause a crash when exporting an FBX and its RootSequence is null.

Fixed an issue that could cause a crash when null animations are used in an animation section.

Fix an issue that could cause a crash when undoing the creation of a subsequence.

Fixed an issue that could cause a crash when using Match with Previous/Next with animation sections trim.

Bug Fix:

Fixed a bug that could cause undulating jitter in the cloth simulation when Temporal Samples are enabled. This was caused by the cloth simulation time step smoothing being enabled during renders.

Fixed a bug that could cause the UWorldSettings::MinUndilatedFrameTime/UWorldSettings::MaxUndilatedFrameTime to be modified and not restored after a render.

Fixed a bug that could cause the example Runtime Executor to always make a call to https://google.com when the editor launched. This issue was fixed by commenting out the code, but leaving it as an example for anyone building their own Executor class.

Fixed a bug that could cause the cache in media tracks to only be drawn for the first loop.

Added a workaround for the UI Renderer setting that could cause some Layout Widgets not liking the 720p PIE preview window (vs say a 4k render).

To activate this workaround, navigate in the Project Settings, to Movie Pipeline In Editor, and enable bResizePIEWindowToOutputResolution.

Your PIE window is still limited by your monitor resolution so you will need to launch the editor with -ForceRes if you wish to render your project at a resolution higher than your monitor resolution.

Fixed a bug that could cause sequence tick managers, with budgeted frame evaluation, to reuse linkers with stale evaluation data, if the linker group was torn down in the middle of a multi-frame evaluation.

Fixed a bug that could cause the details panel "Add Key" buttons to only display for read only sequencers.

Fixed a bug that could cause the -MoviePipelineConfig argument to not be used with assets that existed outside of the "/Game/" directory, such as project plugins.

Fix a bug that could cause added event functions to not reference parameters since the payload cannot be by reference.

Fixed a bug that prevented a hidden Sequencer tab to be brought to the front when the Windows > Cinematic > Sequencer menu option was used.

Fixed a bug that prevented stepping through frames from working correctly. Now auto-scrolling will only function if the setting is enabled.

Fixed a bug that could cause a Level Sequence blueprint from having invalid characters in its name.

Removed an auto-scrubbing behavior which animates the current time to the desired current time. This can be re-enabled through the CVar: Sequencer.AutoScrub.

Fixed a bug that could cause an issue when calling AddChildFolder() from python/blueprints which would result in a folder being in two folders.

Fixed a bug that could cause shot parsing so that if the current prefix is found at the beginning of the shot name, it will be stripped and the parsing of the shot number and take number will continue from there. This fixes a situation where shot prefixes can collide with parsing shot and take numbers because they are looking for the same separators. For example if the shot name is: sq050_shot0010_01, that should be parsed as shot 10 and take number 1. If the user specifies that the shot prefix is sq050, that portion can be stripped so it doesn't erroneously parse as shot 50.

Fixed a tooltip for channel colors so that it refers to key bars instead of track area.

Fixed an issue that could cause a crash by checking read-onlyness of level sequence assets before saving in the Take Recorder.

Fixed a bug that could cause copy/paste binding's descendant bindings to be pasted multiple times.

Fixed a bug that could cause Batch Edit Sections to not work for selected sections and not just the clicked on section.

Fixed a bug that could cause Control Rig additive sections for Rotation Controls to not function correctly.

Fixed a bug that could cause recorded multi-channel audio to not be separated out to different track rows.

Fixed a bug that could cause an FBX export to not be evaluated the start time in display rate, instead it was evaluated in tick resolution.

Fixed a bug that could cause the Animation Mode to discard the Advanced Tab if all of its properties were located in other sections.

Fixed a bug, to prevent infinite sections from being pasted on top of each other.

Fixed a bug that could prevent camera names from being sorted in the Camera Cut Section menu.

Fixed a bug to prevent infinite sections from being selectable and movable when hovering over keys.

Fixed a bug that could cause quat interpolation for consecutive keyframes in sequencer to not operate correctly at low tick resolutions.

Fixed a bug that could cause folders to be renamed when reordering them.

Fixed a bug that could start playback twice when using the spacebar and then down arrow. This issue could result in the latter view state being cached incorrectly, already hidden. From there on, the state is reversed, when the sequence is stopped, the viewport UI is hidden, when the sequence is playing, the viewport UI is shown.

Fixed a bug that could cause a crash when a null pointer check is activated on a missing or deleted Level Sequence asset. This can happen if you create a new take shot and undo it, or if the asset just goes missing, or is removed.

Fixed a bug that could occur when recording with the Timecode clock source, when the user has toggled off Start at Current Timecode, by automatically overriding it. Otherwise, the sequence would end up starting at 0, but the recording is actually at the current timecode.

Fixed a bug that could cause the cinematic viewport's transport range to go missing when switching sequences.

Fixed a bug that could cause rotation keys to spin irregularly when adding a key through the key editor buttons.

Fixed a bug that could prevent the use of a console variable's current priority level when setting a console variable from the Console Variables settings. This will ensure the value always gets set.

Fixed a bug that could prevent clamp scrubbing in the Cinematic Viewport from adhering to the playback range, when clamping is enabled.

Fixed a bug that could cause keys in collapsed tracks to be erroneously selected.

Fixed a bug that could cause a render to fail due to stencil layer names being incorrectly duplicated. Stencil Names are now de-duplicated, for both actor and data layers, before a render begins.

Fixed an issue that could occur with the MRQ, that caused an empty v000 directory to be created when clicking on the output directory in the queue.

Fixed an issue that could cause a crash when using the Sequencer Event Customization when the blueprint graph is deleted.

Fixed a bug that prevented adding a "Deferred Rendering" setting if one of the related settings, such as Deferred Rendering property being set to Lighting Only, is already added.

Fixed a bug that could cause asserts to fire during motion vector evaluation.

Fix a bug that could cause some UI elements to not correctly display for read-only sequences.

Fixed a bug that could cause the Pivot tool's click and shift options from working properly.

Fixed a bug that could cause copy and paste functions to not function properly with Procedural Control Rigs, by ensuring the initialize callback setup is not created until initialization happens with a bound skel mesh.

Fixed a bug that could occur when adding a constraint channel by ensuring curve and resync selections are recreated.

Fixed a bug that could cause scaling options to not operate properly when compensating parent constraints are present on components.

Fixed a bug that could occur when keying weighted control rig additive sections.

Fixed a bug that could cause a RPC stop event to wait from the server when a replicated sequence is played only on the client.

Fixed a bug that could cause overlays to be removed when not checked by all the viewports.

Fixed a bug that could display an incorrect index used for matching value composites.

Fixed a bug that could cause the First Frame Loop offset to cause animation to go out of range, which could cause errors in Montage playback.

Fixed a bug that could cause errors with array property handling in editor by adding property tracks for array elements and autokey.

Fixed a bug that could cause the initial value system to not work properly in interrogation linkers.

Fixed a bug that could cause a delayed drag on the initial position of the marquee drag to be incorrect by storing the value and ending the operation before the end drag happens. This also fixes an issue that could cause an error with test tangent lines when marquee dragging.

Fixed a bug that could cause material parameters to not retain blend channels.

Fixed a bug that could cause reversed dissected evaluation ranges when playing sequences backwards.

Fixed a bug that could cause value decomposition, which can occur when keying or auto-keying values, to add lots of comments, and add unit tests.

Fixed a bug that could occur when baking animations by turning off all constraint keys, removing all -1 keys, and all undoable keys.

Fixed a bug by changing the Sequencer's ability to change the Skeletal Mesh asset from a Skeletal Mesh Component in cooked builds.

Fixed a bug with the Curve Editor's Shift Drag mechanics so it locks immediately and reliably by using the last position instead of current position when it starts.

Fixed a bug that could cause a loophole where non-renameable tracks could be renamed by simply clicking on their label in the sequencer outliner view.

Fixed a bug that could cause a channel to be deleted while adding it by not removing a constraint when compensating.

Fixed a bug that could cause runtime issues when overriding a single float track channel with a perlin noise channel.

Fixed a bug that could cause an incorrect mirrored perlin noise curve preview.

Disabled the Add Section, Blending Algorithm, Edit/Batch Edit Sections right click menus if the sequence is read only.

Fixed an issue that could cause a crash when opening a new map and there is a Blueprint with an active actor sequence by clearing all references to a sequencer widget when closing.

Editing of channel overrides is now properly undoable, and works on multiple channel groups.

Fixed a bug that could cause occasional firing of asserts that indicate that an ECS evaluation system will miss a frame

Moving a Control without a key will now correctly set the value in Control Rig.

Fixed a bug that could cause blending values to be lost when pasting copied tracks and sectors with blending data.

Fixed a bug that could cause a sequence to be erroneously marked as dirty by marking the spawn register as being cleaned up.

Fixed a bug that could prevent linked Anim Sequence with nested sequences from saving.

Fixed a bug that could cause errors by clearing the RF_Transient flag on channel overrides and constraints after a copy and paste operation.

Fixed a bug that could cause an infinite loop while trying to add a possessable to a template sequence.

Fixed a bug that could occur when recreating shapes by ensuring the shapes need to be recreated, in order to avoid performance issues with dynamically created controls.

Fixed a bug that could cause Control Rig shapes to be selectable by tweaking IsSelectable on ControlRigShape components so that it specifies IsSeletactable in the Viewport and the outlines. Controls are also hidden if the hosting component's actor is not visible.

Fixed a bug by ignoring any attempt to restore a pre-animated state on objects that have gone away.

Fixed a bug with the hierarchical bias of sequences that could cause different active playing sequences to be considered together.

Fixed a bug that could cause the duplication of constraints by recreating proper constraint duplicates with the new duplicated objects and adding preanimated state for component constraints.

Fixed a bug that could cause errors when using the Match with Previous operation. This includes a root motion performance fix, because transformers are no longer cached and blended on demand instead, this greatly increases performance.

Deprecated:

Access and the ability to update UMoviePipelineConsoleVariableSetting::ConsoleVariables directly has been deprecated. You can now use the getter/setter methods instead, such as GetConsoleVariables(), or AddOrUpdateConsoleVariable().

Removed:

CameraRig_Rail's Mounted Mesh Orientation has been removed as it is unnecessary.

Synthesis

New:

Add a new option to include normals in the ML Defomer's generated morph targets.

Added support for masking the ML Deformer using color channels.

Added support for joint and curve groups in the ML Deformer's local model.

The ML Defomer's Play button in training mode now plays things, but doesn't calculate deltas, in order to make workflows more efficient and less time consuming.

The ML Deformer now extracts information about the importance level of each morph target, only in Neural Morph Model.

You can now set deformer quality levels when using the ML Deformer, which allows models to opt into. Morph models will disable morph targets based on this quality level.

The ML Deformer now dynamically updates and recompress morph targets without having to retrain.

The ML Deformer now stores raw deltas in the UAsset, and removes them on cook. This allows recompression even without training first. Also allows visualizing morph targets at any time.

Added documentation to the ML Deformer's python code.

The ML Deformer now skips saving some properties, like the deformer weight and ground truth lerp, to prevent saving a state where you wouldn't see the deformer being active anymore in your next session.

Added new ML Deformer statistics to show performance and memory usage.

Improvement:

Moved the Include Normals property in the morph target category out of the compression group.

Moved some of the GetModuleChecked functionality to run in LoadModuleChecked.

API refactors now require less code to create new models by introducing some new base classes you can inherit from.

ML Deformer's tooltips have been updated.

The ML Defomer's API has received more documentation.

Added a SetWeight and GetWeight blueprint functions to control the weight of the deformer through blueprint.

The ML Deformer's python script now shows more digits while logging the learning rate for increased accuracy.

The ML Deformer's python code has been refactored, placing shared code into the ML Deformer framework, which plugins can then import and use.

Renamed and grouped some ML Deformer properties to make things more intuitive.

The ML Deformer plugin is now in Beta.

The ML Deformer's API has been improved, making properties protected.

The ML Deformer now sets the correct section indices inside the morph targets, rather than just including all sections.

The ML Deformer now sorts the morph target deltas by vertex number. Perhaps this could help with some GPU caching.

The ML Deformer now detects changes in vertex count, and shows a warning in the morph target section, when dynamic morph updates aren't possible until after retraining.

Added progress bars to the ML Deformer when creating and compressing morph targets.

Crash Fix:

Fix an issue that could cause a crash related to opening an MLD asset, closing the asset editor, and modifying or reimporting the mesh.

Fixed an issue that could cause the ML Deformer asset to be in a bad state, resulting in crashes and weird behavior. This could likely happen when aborting during training, or changing assets after training, and saving.

Fixed a bug that could cause a crash by preventing dynamic morph updates when it is not possible.

Fixed an issue that could cause a crash when creating a new actor blueprint, with a skeletal mesh and ml deformer component, using the neural morph model set as ML Deformer asset, with the vertex delta model selected as the skeletal mesh component's mesh deformer.

Bug Fix:

Fixed a bug that could cause duplicated log messages.

Fixed a bug that could cause the UI to close unexpectedly when deleting or editing curves or bones in the include list.

Fixed some bugs that could prevent the sampling cache from being invalidated when changing certain properties.

Fixed an issue that could cause a crash when the local bone transforms on the skeletal mesh component were empty when using the ML Deformer.

Fixed a bug by changing the deformer graph for the morph model to the updated deformer graph path.

Fixed a bug that could cause caching issues with the deformer graph.

Fixed a bug in the reset to default button of the deformer graph.

Fixed an issue that could cause a crash when saving an ML Deformer asset where the source geometry cache asset it uses doesn't exist anymore.

Core Cooker

New:

Implemented Soft Garbage Collection for the cooker. The command - trigger is a partial garbage collect when available physical memory reaches various thresholds. This significantly reduces the peak memory load of the cook commandlet for large projects, while adding only a small cost due to reloaded packages.

UnrealBuildTool

New:

Restored the ability to use XGE executor on non-Windows platforms.

Added support for early init scripts.

An option to allow using clang linker when using clang compiler has been added.

Added a GetPlugin method for ModuleRules.

Added better Plugin Project Support in generated projects.

Added Support msvc analyzer extensions to Unreal Build Tool Enable by setting ModuleRules.bStaticAnalyzerExtensions to true. It is recommended to use ModuleRules.StaticAnalyzerRulesets to filter the warnings that are reported as this will enable a large number of additional warnings. Please see the following links for more details: https://learn.microsoft.com/en-us/cpp/code-quality/using-the-cpp-core-guidelines-checkers https://learn.microsoft.com/en-us/cpp/code-quality/using-rule-sets-to-specify-the-cpp-rules-to-run

Unreal Build Tool now features a Cross Platform QMake Generator.

Bug Fix:

Fixed the action graph copy action on non-Windows platforms.

Added the -Project param to command line build params in generated projects.

Added additional debug output for makefile argument changes.

Fixes for generating the Rider project model.

Fixed an issue for writing make files with UTF8-BOM encoding.

Added support for coroutines, these are enabled by the bool variable bEnableCppCoroutinesForEvaluation in the Rider.

Moved tool projects into the proper subfolders for generated projects.

Made VSCode .ignore entries absolute.

Added fixes for metadata of UnrealBuildTool gexf export.

Added fixes for when Regex failed to parse AndroidClangBuild.

Editor

New:

Exposed the source path of DNA Assets to AssetUserData in the Skeletal Mesh Details Panel.

Browsing to Assets where the current settings would cause the Asset to be hidden now updates the settings of the active Content Browser to show the Assets. A toast notification displays which settings were updated.

OpenEXR: Added support for arm64 architecture on Linux.

FileName description field added to DNA Import Window.

Added arm64 architecture support for lmath, OpenEXR, OpenVDB and Boost on Linux.

Implemented context menu DNA Actions for Skeletal Meshes.

When enabling Defer Compression, the Texture Viewer now displays the uncompressed texture right away.

Defer Compression is not enabled by default on texture reimport.

Added a new TypedElements.EnableViewportSMInstanceSelection CVar, which can be used to enable or disable Instance Selection for Instanced Static Mesh Components in the Level Editor Viewport.

The File > Recent Levels submenu now contains a Clear Recent Levels command.

The Scalability Menu in the editor now works per Preview Shader Platform.

There is now an additional compatibility check between groom cache and groom asset done at import.

You can now choose how floating point textures are compressed by default. The legacy default behavior is to always use HDR F16. Two new good options to use are BC6H (for games) or F32 formats when the source is 32-bit (for VFX).

When one or more "undone" transactions are removed from the undo stack because a new transaction started, the editor now restores the removed transactions when the newly inserted transaction is removed because it's considered "transient" (it contains no record), similar to what happens in the event of a canceled transaction.

The tab manager now saves its layout as soon as you dock or undock a tab.

You can now exclude new CVars you define in code from being previewable so they don't change depending on the shader platform you preview in-Editor and remain set to the value set by the Editor shader platform.

Texture mip generation filter now clamps (instead of wrapping) at texture edges if the UV address modes are both set to clamp (for new textures with bUseNewMipFilter only). Has no effect on existing textures or simple average 2x2 mip filter.

Updated glTF transmission and MX transmission shading for Interchange.

Added a new Editor Preferences setting to set the maximum number of auto saves.

BMP image import now supports 16 and 32 bit bitmaps and most advanced formats.

Detected and deprecated the construction of a subsystem from Python with a message telling the user how to get the already existing subsystem singleton.

Textures now provide Blueprint functions to help detect nearly-empty textures: ComputeTextureSourceChannelMinMax and Blueprint_GetTextureSourceDiskAndMemorySize.

Disable Preview button is now named after the Editor Shader Platform.

Fixed reverting non-packages files from the changelist window that would never revert because they were not packages.

Made several optimizations to improve editor start up time.

Newly imported Textures now get configurable default properties from the Texture Import Settings in Project Settings.

Reimported textures now get their OodleTextureSdkVersion bumped up to latest.

Preview Shader Platform using different ShaderMaps and the DDPI/Cvar values of the Previewable Actual Platform NumPlatforms limit changed from 64 to 65536, limited by NumBits

The undo buffer will now output its size to the log file so that it is easier to confirm that it has been set to the correct size.

Removed check for UField for determining if a UObject is a valid asset for Editor scripting utilities.

Updated the Plastic SCM plugin to version 1.8.0 (from 1.6.2).

Added optional parameter bApplyComponentTransform to some MeshMergeHelpers::RetrieveMesh variants.

The Level Editor now has a new Show Subcomponents option that implements the ability to draw only the root components of the selection set. This option can help reduce visual noise when an Actor has multiple components with complex visualizers.

Added an option to the Size Map tool to include or exclude Editor-only dependencies.

Improvement:

Optimized in-Editor Geometry Collection component registration. This improves performance of operations like duplication of geometry collection-based objects or in-Blueprint property changes

Improved PNG import with simple transparency. The editor now uses better filters to propagate RGB color into transparent regions. Color propagation is only done on PNGs with simple binary transparency, not true alpha channels.

Virtual textures, when building, will now reuse the results from another platform as they never tile and can freely share results. This dramatically saves texture build time for multi platform projects.

EXR texture import now sanitizes floats to remove inf & nan.

Added support for importing Alembic with guides-only groom cache.

Optimized the source control changelist widget to handle a reasonably large number of files smoothly (5000-20000).

Added shared Linear Encoding. This is disabled by default and can be enabled with the r.SharedLinearTextureEncoding CVar. It allows texture builds for platforms that tile textures to reuse the base encoding if it's already been done by another platform, greatly speeding up texture builds for multi platform projects.

Optimized the process of checking if Asset thumbnails need to be dirtied when an object property changes to speed up entering PIE in some projects.

OFPA levels are no longer dirtied when copying and pasting Actors that aren't static brushes.

Revision Control History now displays file size with the best unit.

Crash Fix:

Fixed a crash associated with creating texture arrays in the Editor.

Fixed a race condition causing a crash in XBoxCommonDeviceDiscovery on Editor shutdown.

Fixed a potential crash when importing Alembic files as skeletal mesh that are too big to be imported.

Fixed a crash that happened when deleting more than one folder at a time from the scene outliner.

Fixed a potential crash when importing Alembic with completely invisible meshes as geometry cache.

Fixed a crash when exiting Paint Mode after deleting a Material that was being painted.

Fixed a crash in the ContentBrowser when the -nothreading option was enabled.

The import of Assets via the Asset Tools API now validates that the destination path is mounted and avoids crashing if this is not the case.

Bug Fix:

Fixed the Perforce source control API returning invalid file paths when the user's client spec root ends with a /or .

Fixed Niagara Assets destroying thumbnail data when loaded from a cooked package.

You can now import a DNA file with the same name as a Skeletal Mesh.

Fixed a bug in the Static Mesh Editor that caused toggling the Show > Vert Colors option to re-enable the environment map background even if Show Background was disabled in the Preview Scene Settings

Software cursor now takes into account screen DPI settings and shows the correct size on screen.

The 'Preview Rendering Level editor setting now correctly applies the values defined in platform device profiles to the p.RigidBodyNode and p.ClothPhysics CVars.

Fix a casting bug that was causing larger values of the config file setting [Undo]UndoBufferSize to be truncated.

Fixed an issue where the color curve editor wouldn't update when gradient stops were moved.

Fixed a Mesh Merge Utility bug where collisions of ISM components were not merged correctly. The editor now merges the collisions of all the instances in the ISM component, instead of a single collision instance using just the component transform.

Texture Viewer mouse wheel zoom is now a multiplicative factor instead of an additive factor. This fixes zoom getting very slow as it gets larger.

A Toggle Editable event type is now sent instead of Value Set when the edit condition state of a property changes (when. the inline checkbox is toggled), so that the editor can listen to properties becoming (un)editable

Thumbnails can no longer be saved as JPEG files with an incorrect .png extension.

Fixed Content Browser class permission list filtering always being recursive

Fixed an issue where the preview in the Paper2D Sprite Editor wouldn't update when adjusting the UV Coordinates.

Fixed cooked textures returning a size of 0,0 when queried by an editor.

Fixed large nonpow2 textures failing to build..

The editor now waits until the number of clients set for Play In Editor is committed by the user before saving the config file to improve performance of the Project Settings menu.

Fixed property display for ReadOnlyKeys.

Fixed the UnsavedAssetsTracker being invoked on a background thread and firing delegates to code that assumes everything happens on the game thread.

Copy operations no longer modify world transforms.

Fixed a bug where turning off StreamableRenderAsset FResourceSizeNeedsUpdating was causing multi-second hitches in the editor when the camera moved.

Fixed possible out-of-memory issue with the FSourceControlFileStatusMonitor reserving -1 items in an array.

Removed an ensure that could fail while reading from a valid texture that had no source art.

Fixed 6-image array DDS files being imported as cube maps.

Fixed Advanced Copy not fixing up external actors reference to packages that were part of the copy.

Fixed an issue where diffing files could fail when using Git LFS.

Fixed GetDefaultTextureFormatName logic so that a CompressionSettings TC choice of an uncompressed format is preserved and constraints that force use of uncompressed don't cause unnecessary format changes.

Undo history now properly cleans up the transaction details view when clearing the undo stack.

Fixed a bug that caused changing the filter on a texture not updating materials in the editor.

Fixed dragging a texture on a cube when a material already exists, and added some protection against redirects in similar cases.

A PreviewPlatformName with NAME_None in MaterialShaderQualitySettings is now correctly considered valid.

Fixed packages not being marked as dirty when undoing post-save.

The undo buffer is no longer cleared when saving newly added or deleted One File Per Actor (OFPA) actors.

Auto-save now includes newly created packages.

Geometry collections are now properly rendered in their Blueprint owner thumbnail.

Fixed Geometry Collection Asset thumbnails not being properly centered.

Fixed an issue that prevented undoing changes after exiting PIE.

Fixed an issue in the history window where strings that began with whitespace could show as empty in the description column.

Standardized changelist description single line to a helper function to ensure the changelist window and history window have consistency.

The number of embedded geometry elements in the Fracture Editor now displays properly when no geometry collection is selected.

Fixed an issue with Mode Manager where ActorsDuplicatedNotify was not called in some cases.

Fixed cases where bCooked could get mistakenly unset when serializing a Class during reference collection in cooked versions of the Editor.

Fixed an error that caused unexpected behavior in the color picker.

Fixed the import of UDIMs being broken when using JPEG files and Interchange.

Fixed the text alignment in the Automation window so that it doesn't overlap under certain conditions.

Fixed a bug where unsaved Assets could fail to open in their associated Editors in certain situations.

Fixed Actor meshes vanishing from Editor viewports after building lighting, geometry, or navigation.

Fixed an issue where components had inconsistent behavior between their gizmos and the Details panel when the component had absolute location turned on.

Fixed a hang that could occur in the Editor when waking the PC from sleep after about an hour.

Restored the Make Writable button in PromptToCheckoutPackages when the source control provider didn't use readonly flags.

Fixed crash when reloading .umap assets that have a level blueprint using macro graphs or event dispatchers.

Fixed an issue where pitch would never lock in the level editor when rotating the perspective camera.

Disabled the menu option for viewing the changelists window if changelists are not supported by the current revision control provider.

LOD previews now get the correct per-platform screen size.

Fixed CanvasText offset causing text to be blurry.

Deprecated:

Deleted Crunch source code. Crunch is no longer used by Unreal Engine.

Datasmith

New:

Boost: upgraded the engine version of the third-party Boost libraries to version 1.80.0.

MaterialX: upgraded the engine version of the third-party MaterialX libraries to version 1.38.5.

USD: upgraded the engine version of the third-party USD libraries to version v22.08.

Solidworks: Optimized export speed.

Solidworks: Components suppressed in every configuration are not exported anymore.

Solidworks: suppression state of components is not changed during export.

[glTF] If dual clear coat normals are disabled in render settings, they are ignored and Unreal Engine issues a warning when clear coat materials are exported to glTF.

[glTF] Replaced UGLTFExportOptions::ExportLights (int32) with UGLTFExportOptions::bExportLights (bool)

Made the following improvements to the USD Stage Actor C++ interface: C++ code can now set the USD Stage directly, it is now possible to get and set the currently isolated layer, and derived C++ classes can now access and override more functionality.

Improved the mechanisms for automatically attaching USD Stage Actors to the USD Stage Editor. For example, the corresponding play-in-editor (PIE) version of the USD Stage Actor is now automatically attached when going into PIE, and the USD Stage Editor now automatically attaches to the correct USD Stage Actor whenever a child actor is selected on the World Outliner and the Selection Sync USD Stage Editor option is enabled.

[glTF] The glTF exporter now uses Unreal engine's material analysis.

[glTF] Improved reuse of texture samplers in exported glTF files.

[glTF] Improved material baking of the following expressions when exporting to glTF: TransformPosition / TransformVector, ObjectScale, and LocalPosition.

[Solidworks] Assembly exports variants for Parts with different visual appearance in different configurations.

Added the console variable "USD.DiscardUndoBufferOnStageOpenClose". The console variable makes it possible to discard the transaction buffer, and prevent Assets and Actors generated from USD from being recorded into it when opening a USD Stage. This can help when trying to open large scenes with a restricted memory budget.

[Solidworks] Display states for configurations are now exported as variants.

[glTF] The glTF exporter now uses Unreal engine's material baking.

USD Stage Actors now reference an instance of an experimental new Asset type called "USD Asset Cache", which owns all the Assets generated when opening USD Stages. It allows all USD Stage Actors to share the same Assets, and retain those assets (up to configurable limits) even when no USD Stage Actor is currently using them. The USD Asset Cache can be constructed from the Content Browser, like any other Asset.

The Details Panel of USD Stage Actors now contains an "Open in USD Stage Editor" button that opens or reveals the USD Stage Actor and automatically attaches to it.

When exporting Unreal Engine materials to USD, baked textures with the same color value for all pixels write that color value directly on the exported USD material. There is a new option on the export dialog, called "Constant Color as Single Value", that toggles this behavior. When the option is disabled, the exporter emits the full resolution texture.

A new library called "UsdStageEditorLibrary" can now be used from Python or Editor Utility Blueprints in order to interact and interoperate with the currently opened USD Stage Editor.

Added support for running export tasks in runtime for formats that allow it. For example, glTF.

The USD import options dialog now contains an option to "Import at Specific Time Code". If that is option enabled, you can specify a Time Code at which to sample the stage when importing Assets and Actors. If that option is disabled, the stage is imported at the default (not animated) time code.

[3ds Max Exporter] Changes to custom object properties now sync with DirectLink.

The USD Importer plugin now parses only materials and textures that are actually used by prims, and the current material purpose, when you open USD Stages. When importing, the advanced option "Import Only Used Materials" toggles this behavior.

The "USD.CollapseTopLevelPointInstancers" console variable now controls whether to collapse top-level USD point instancer prims. Previously, this feature was controlled by an import option and USD Stage Actor property.

It is now possible to specify custom reference materials to use when spawning material instances while opening or importing an USD Stage. You can configure custom reference materials from the Project Settings, in the "Engine - USD Importer" (search for "USD" to find that section quickly).

When editing an USD Stage with multiple sublayers and animations,you no longer have to set the correct layer edit target to unlock the corresponding Level Sequence. Changes to a particular LevelSequence always affect the corresponding layer automatically.

It is now possible to set the stage options on the USD Stage Editor window without having any USD Stage Actor attached.

It is now possible to collapse Xform hierarchies with a single Mesh prim when opening or importing USD Stages. Previously, at least 2 Mesh prims were required.

The USD Stage Actor picker on the top-right of the USD Stage Editor window (Windows > Virtual Production > USD Stage) now displays the USD Stage opened for each Actor, if any.

The USD import and export options dialogs now remember the last set sizes.

[3ds Max Exporter] Fixed texture sync when multiple texmaps can use the same image file.

[3ds Max Exporter] Added more output statistics for baked textures.

[3ds Max Exporter] CoronaLegacyMtl opacity is now supported.

The USD Importer now generates Two-Sided versions of materials if they are assigned to meshes that are marked as "doubleSided" in USD.

The USD Importer plugin now properly assigns material overrides to Components spawned by a USD Stage Actor, and writes those assignments to the USD Stage, even if the Components represent collapsed meshes.

Increased the maximum number of skeletal mesh vertex influences that can be parsed from USD Stages from 4 to 8. Unlimited influences can also now be used if that option is enabled in the Unreal project.

[glTF] Added a default value of (empty set) to the "SelectedActors" parameter in the "ExportToGLTF" Blueprint function.

Bug Fix:

Fixed regression from UE 5.0. Direct Link now reconnects to source for previously imported Asset.

[Solidworks] Fixed an issue where a MeshActor loses its mesh on Sync when a Part changes.

[3ds Max Exporter] Fixed mesh quality for Body Cutter.

Fixed an issue where the collapsing mechanism used to parse USD Stages could consume Light and Camera prims and never generate anything in the Unreal level.

Solidworks: Made fixes to MotionStudy animation export.

[glTF] Fixed an issue where material baking incorrectly skipped some properties, based on the material's blend mode, when exporting to glTF.

[3ds Max Exporter] Fixed DirectLink sync for modifiers that do not send a CHANGE event. For example, Body Cutter.

DatasmithDirectLink: Fixed a crash that could occur when receiving a DirectLink message while Unreal Engine is shutting down.

Solidworks: Fixed export of animated rotation.

[glTF] Fixed a crash that occurred when trying to export Rect Lights to glTF.

Fixed an issue where some Level Sequence transform tracks were ignored when exporting Level Sequences to USD.

[3ds Max Exporter] Removed the file extension from the scene / DirectLink name.

The Unreal Editor now shows an error message when the export of a Level or Asset to USD fails because the target output layer already exists in USD's internal registry of layers.

Fixed an issue where some USD Stage import options were not pre-filled in the import options dialog when using the "Actions > Import" command in the USD Stage Editor.

[Solidworks] Fixed an issue where the exporter would not install if only the 2023 version of Solidworks was available.

[Datasmith Revit Exporter] Fixed Duplicated IDs for Level elements.

Fixed an import bug that generated artifacts in texture display.

[glTF] Fixed conversion of light intensity from non-candela units when exporting to glTF.

[Solidworks] Fixed the export of Part materials in multiple configurations.

[Solidworks] Fixed infinite reimport that occurred after deleting a component when auto sync is enabled.

[Solidworks] Fixed an issue where material modifications were not detected.

[Solidworks] Fixed various plugin stability issues that occurred when disabling / re-enabling the Solidworks plugin, including an issue where the DirectLink source disappeared.

Fix an issue where static meshes generated when opening or importing USD Stages did not receive material assignments if the corresponding prims only had material bindings with specific material purposes.

[SketchUp] Fixed an issue where textures are not exported when the destination folder doesn't exist.

[glTF] Fixed URIs not being percent-encoded and sanitized in glTF exports.

[3ds Max Exporter] The Datasmith ribbon toolbar is now available on localized versions of 3ds Max.

[glTF] Fixed an issue where incorrect alpha factor was exported to glTF for certain materials.

[Solidworks] Removed negative scaling of exported light transformations.

[glTF] Fixed detection of all TransformVector and TransformPosition material expressions to determine the necessary baking mode when exporting to glTF.

[glTF] Fixed conversion of binormal vector sign in the vertex tangent data exported to glTF.

Fixed an issue where editing USD skeletal animations with Control Rigs wouldn't work for rigs that modified their own topology on the "Construct Blueprint" event.

Fixed an issue where payloads or references to prims on the USD Stage Editor were not added in some scenarios.

Deprecated:

[glTF] Removed support for all custom Epic extensions from the glTF exporter (in anticipation of upcoming support for official Khronos extensions).

[glTF] Removed UGLTFExportOptions::NoLossyImageFormatFor

[glTF] Removed UGLTFExportOptions::bStrictCompliance. It is always enabled now.

The actors spawned by an USD Stage Actor no longer have the SequencerActor tag, because the World Outliner can now display transient actors by default.

[glTF] Removed UGLTFExportOptions::bIncludeGeneratorVersion. It is always enabled now.

[glTF] Removed UGLTFExportOptions::NoLossyImageFormatFor

Deprecated the option to "remove Unreal materials" when exporting assets and levels to USD, because it is not for the new method of exporting Unreal material assignments that use dedicated Material prims.

Framework

New:

The Interactive Tools Framework class UInputRouter now supports updating modifier key states on the active mouse capture when the modifier keys change but the mouse hasn't moved.

Synchronized the scrolling between left and right details panels in UE Asset Diffs.

UCombinedTransformGizmo now supports both Relative and Absolute (world-space) position and rotation snapping. Previously, it only supported Absolute World-Space grid snapping. Relative is now the default, similar to the standard UE Gizmo.

Added an option in FUnrealEdMisc::RestartEditor() that can specify additional commandline arguments when restarting the editor.

Extended SGraphActionMenu so that owners can directly provide the action menu source list at refresh time.

Added a hook for external sources to override the editor's main window on startup, emulating how the project browser works.

Upgraded revision control menu to be more responsive, consistent, and available under the Asset menu in editor windows.

Changed behavior of "Checkout" to "Sync and Checkout."

Added "Make Writeable" and "Revert Writeable" actions.

Only show actions that the current revision control provider can support.

Crash Fix:

Fixed a crash that occurred when attempting to duplicate a level blueprint.

Bug Fix:

Added __class_getitem__ to PyWrapperArray, PyWrapperFixedArray, PyWrapperSet, and PyWrapperMap. This supports Python type hinting when using unreal.Array, unreal.FixedArray, unreal.Set or unreal.Map to hint a method's input parameters, its return value, or when they are declared globally.

Fixed Python GIL deadlocking with reinstancing objects.

Fixed python type hinting for unreal.get_editor_subsystem() and unreal.get_engine_subsystem() to hint the correct types.

Project Launcher now supports multiple .target.cs Build Target files.

Find the best available D3D device for standalone Slate applications. This uses similar options as RHI D3D11.

Fixed bad memory access in AssetThumbnail that occurrs when ThumbnailMap is destroyed due to going out of scope.

Landscape

New:

Added a setting to enable distance field lighting for LandscapeGrassTypes.

Added a single method in ULandscapeSubsystem to force regenerate the grass at runtime. This can flush all grass on landscape components and update them all (synchronously, optionally), using an optional list of camera locations in case one wants to regenerate grass around another location than the streaming manager's viewpoint location.

Implemented a fallback for water surface depth sampling in underwater post process on mobile. It now intersects the camera to pixel ray with a horizontal water surface located at the water Z at the view position.

Optimized mip upload by unlocking all mips at once, to avoid recomputing FTextureSource's hash for each mip that is written to (on a landscape with ~256 components : 170ms -> 50ms for reading back heightmaps/weightmaps)

Added ability for users to select which Landscape is the target of Landscape Spline Actors.

Added the bEnableCullDistanceScale property to Foliage that can be used to scale cull distance per platform.

Improvement:

Added cosmetic improvements to water-related Details panels.

Landscape Layer Weight/Sample/Switch's title can now be edited directly in the graph, similar to Texture sample material expressions.

Bug Fix:

Fixed a crash when using alpha brush/pattern landscape tool and improved support for various cases with the alpha brush texture.

Fixed a crash when listing textures (listtextures cmd) after having deleted a landscape actor.

Fixed a crash when force deleting a material which has (Landscape) material instances. The UMaterialInstanceConstant's Parent field is force-serialized to null.

Fixed important slowdown when using a landscape brush with a large radius

Workaround for the D3D12-only bug that randomly generates invalid landscape tiles on global merge.

Changed the outer of the Nanite static mesh. Using the package as the outer allows to avoid duplicating the mesh when entering PIE.

Made the NaniteComponent TextExportTransient so that copy/pasting doesn't lead to the mesh being shared between actors.

Made the NaniteComponent DuplicateTransient so that saving as a map doesn't lead to the mesh being shared between packages.

Fixed WaterMesh not being added automatically when adding a water body that doesn't affect landscape into the map.

Fixed Undo with Nanite Landscape.

Unified all invalidation/update code paths so that we respect landscape.LiveRebuildNaniteOnModification in all modification cases.

Made the NaniteComponent non-transactional and made it invalidate the Nanite mesh upon Undo.

BuildNanite is now able to build either all proxies or only proxies from a list (including streaming proxies, in the case of a ALandscape).

BuildNanite data can now be done per Landscape Proxy Actors, allowing the user to update only a list of select Actors (supports multi-selection).

Added Rebuild Data button to Landscape Proxy Actors to force building the Nanite data even if the content has not been detected as having been changed.

Landscape Proxy Actor Details now supports multi-selection and can display Landscape details only if all selected proxies are share the same parent ALandscape

Fixed Nanite Landscape which would fail to build at 64 components.

Fixed NaniteLODIndex, which would show in the Details panel even when Nanite Landscape is not enabled.

Added progress bar when building Nanite from the Details panel buttons.

Disabled navigation data on Nanite Landscape Static Mesh

Fixed various WaterZone actor property changes that would not trigger a proper water info/mesh rebuild.

Fixed warning about Landscape thumbnail Material Instance shader caching not being issued when in SM6.0.

Prevented UBodySetup's cooked collision data from being generated for Landscape visual-only elements.

Removed code that was preventing the SplineEditorMesh to be loaded in commandlets.

Fixed crash when using alpha brush/pattern Landscape tool and better support various cases with the alpha brush texture.

Landscape tool brushes become red and non-interactive when the alpha brush is invalid.

Setting an invalid alpha brush (e.g. a cooked texture in a cooked editor or a virtualized texture with invalid virtualization settings such that the texture source cannot be retrieved) does not crash the UI anymore and now shows as empty in the UI This generates a log error.

Alpha brushes now support the same failure conditions as the normal brush (unloaded components, etc.).

Alpha brush textures now support all texture formats and are linearized if necessary when reading the texture data.

The alpha brush texture channel is auto-corrected if one uses an invalid channel (e.g. Green on a G8 texture).

Fixed Landscape Actors becoming dirty on load when using Nanite Landscape.

Changed the outer of the Nanite static mesh. Using the package as the outer avoids duplicating the mesh when entering PIE, which saves a lot of time to go into PIE (~40s for a 2k x 2k landscape).

Fixed the NaniteComponent TextExportTransient so that copy/pasting doesn't lead to the mesh being shared between Actors.

Made the NaniteComponent DuplicateTransient so that saving as a map doesn't lead to the mesh being shared between packages.

Fixed r.water.visualizeunderwaterpostprocess, which was showing a misleading material name (the topmost parent).

Fixed editor transactions being incorrectly started when using the mouse shortcut (ctrl+shift+right click-drag) to adjust the brush radius/falloff in Landscape mode.

Added support for landscape material instances (per-component MICs) for Nanite Landscape.

Fixed a rare crash when quickly applying undo and/or redo operations to Landscape sculpting or painting.

Fixed issues where Landscape on mobile devices would not have some layer info weightmap textures available when reroute nodes or material functions are used in the Landscape Material.

Deprecated:

Removed CollisionThickness from Landscape.

Media Framework

New:

Added a "just-in-time" option to MediaTexture in the Media Framework. This makes it possible to run a just-in-time render of the media when the MediaTexture creator knows how late in the rendering pipeline it is needed, which can reduce latency for streamed media.

Scripting

New:

Exposed multiple viewport-related editor behaviors to editor utility widgets.

Added extended error information for a SyntaxError in Python. This now reports the error line and the offset within it that the error occurred on, which makes it consistent with the error reporting from PyErr_Print().

Added Python glue support for structs with an internally mutable state. You can mark a ScriptMethod function taking a struct with ScriptMethodMutable to denote it as needing to copy the input struct back out despite it being marked as const. This supports the function changing internally mutable state within the struct, and is equivalent to passing the struct as UPARAM(ref), but preserves the internal mutability of the struct by the function signature.

Added a new experimental system for creating Interactive Tools in the UE Editor using Blueprints, called the Scriptable Tools Framework. You can create subclasses from UEditorScriptableInteractiveTool, as well as subclasses UEditorScriptableSingleClickTool and UEditorScriptableClickDragTool, to create Tools that support functionality such as:

Capturing mouse input

Creating and listening to 3D Gizmos

Per-frame Tick

3D and 2D/HUD debug rendering

Custom Property Sets with "watchers" that allow responding to property changes via Delegates/Events.

A new ScriptableToolsEditorMode plugin adds a new Editor Mode which automatically displays all UScriptableInteractiveTool types available in the current project in a sidebar Tool Palette, with Tool interaction similar to Modeling Mode.

Exposed GetInterpreterExecutablePath through IPythonScriptPlugin.

Added a TabDisplayName property to EditorUtilityWidgets. If set, this is used as the tab name instead of the Blueprint asset name.

Added an UnregisterTabByID method to the EditorUtilitySubsystem, making it possible to unregister tabs previously registered through the subsystem.

Bug Fix:

Updated RandomStream to work in Python.

Replaced deprecated functions in FPythonScriptPlugin::EvalString.

UI

New:

Added thumbnails for media sources.

Dialogs that display a paths tree now also have a collapsible Favorites area.

You can now add external objects and hide the object root by specifying an FAddPropertyParams struct.

Added right-side extension panel (LevelViewportToolBar.RightExtension) to SLevelViewportToolbar.

The tooltips for UFUNCTION(CallInEditor) buttons no longer start with the boilerplate text ("Call an event on the selected object(s)") before custom tooltip text. That default text now only appears if there is no custom tooltip text available.

Added button to run / stop Edotpr Utility Widgets when editing them.

Added the ability to filter FPrimaryAssetId by class.

The actual current camera speed is now displayed in the viewport toolbar.

Added support for multiple thumbnail render frequencies. Previously, thumbnails could only be rendered every frame or on property change.

Groups added in details customizations can now be formatted as though they are subcategories.

Added an option to ignore editor gamepad navigation actions in slate.

Content browser settings have been moved to the editor config system. This makes them more persistent across branches, and less likely to be lost on editor shutdown.

You can now specify global, static, and object-local bool UFunctions in edit conditions.

Add customizability of BeforeButton alignment for the SCustomDialog widget.

Updated Revision Control icon placement on Content Browser tiles to move them to the bottom right of the tile.

Added support for multiple columns to the list view.

Added a column to show the revision control status to the list and column view.

Added an ellipsis at the end of the description when the changelist description is too long to be displayed correctly.

Crash Fix:

Fixed an issue in the Content Browser that caused the editor to crash when the user tries to delete a custom filter that is active in multiple Content Browsers.

Bug Fix:

Mouse grab cursors in Linux now appear correctly.

When removing a tab in UCommonTabListWidgetBase, subsequent tabs' indexes are now decremented.

Tooltips are now available for items in StructViewer.

Arrays of FTimecode now display the additional property buttons (such as Delete) next to the rows.

If a subobject in the details view was marked pending kill, the details view would keep rebuilding itself every frame until the object was GC'd. We now make sure that the object is valid before running the check.

Previously, the Profile Editor would allow users to turn on packaging while deploy to device was also turned on. Now, the logic in LauncherWorker.cpp's CreateUATCommand() method ignores the packaging setting if deployment to device is requested. With this change, the Profile Editor's UI will not allow both packaging and deploying to device in the same profile.

IPropertyHandle::GetMetaData and related functions now always check the instance metadata as well. This was expected behavior when calling SetInstanceMetaData, but it was only being applied selectively by certain widgets until this change.

Ranges now use IPropertyHandle::GetMetaData() instead of FProperty::GetMetaData(), allowing them to function correctly when placed in collections.

Updated calculation for determining when SClippingHorizontalBox should add a wrap button. This improves how toolbar overflow options are shown at certain resolutions.

Identical warning notification popups are automatically dismissed.

The Show Hidden Properties While Playing setting is now respected in the Details view.

SPropertyEditorNumeric's ForceUnits metadata now can also be set per property instance.

DataTables that used EditConditions with the EditConditionHides metadata no longer trigger a check() after the table is cleared.

Fixed all -Winconsistent-missing-override warnings.

Fixed an issue where all expanded elements in the details panel would collapse when certain types of properties such as array properties were edited.

Fixed an audio memory stomp in the Flite text to speech plugin.

UX

New:

Menu items that use custom widgets can now have tooltip overrides.

Added right-click menu options to copy the file path and the package path to the clipboard inside the package dialog window.

Added 0.1 as a scale grid snap option.

Clicking Delete in the Favorites view now removes the favorite instead of deleting the folder.

Added tooltips to the button used to find a selected material's textures in the Content Browser.

Disabled this button when the material referenced no textures.

Added a filter and column in the Outliner to show unsaved Actors.

Added a filter and modified the Source Control column in the Outliner to show uncontrolled actors.

Removed the Actor type text that shows in the Item Label column while searching in the Outliner.

Added alternating colors for rows in the Outliner and Content Browser tile and column view.

The Outliner now queries the Level Editor to pick the correct world based on context, preferring PIE over Editor worlds.

Improvement:

Generalized property editor metadata so that other systems can use it in the same way and have the same behavior as in the Details Panel. For example, scrubbing Translation values now increments by 1 everywhere, scrubbing Scale values increments by 0.0025 everywhere, and scrubbing Rotation values is clamped between 0 and 359.999 everywhere.

Crash Fix:

Fixed a rare crash in the Actor hierarchy when the representing world was invalid.

Bug Fix:

Set the color to full brightness/opacity when picking from the color wheel/spectrum if it was previously almost black or transparent.

Fixed an issue where you couldn't delete a custom filter that was active in multiple Outliners.

Fixed an issue that caused there to be two Virtual Production categories in the filter bar menu.

Fixed an issue causing duplicate filters in the Outliner when a layout was loaded.

Resolved an issue where light function materials assigned to a light would be removed when switching between static and non-static light mobilities.

Fixed a bug where table headers were not rendered directly above their column's row items in tables with many columns, like data tables and Procedural Content Generation (PCG) point data tables.

Fixed a bug that prevented copy-pasting materials on mesh components.

Fixes selected component being lost when compiling a Blueprint.

Fixed height preview mode activation/deactivation and preview mesh cycling.

Deprecated:

Removed the Starship Gallery test suite from the editor. It was not designed to run inside the editor and could therefore cause crashes.

Foundation

New:

Added various cost amortization optimizations for the ReplicationGraph's dormant Actor cleanup feature.

Implemented FAutomationTestBase::IsLatentCommandQueueEmpty() function that returns whether there is no latent command in the queue.

Prevented approved reference images from being copied to the html test report for a successful test.

Enabled Lumen ray tracing when enabling raytracing.

When building you can now specify a "-staged" param which will append a Loose BuildFlag requirement if valid.

Replaced an extraneous plugin-load-error popup with a log.

A new Console Variable has been added to relax asset compatibility checks: s.SkipChangelistCompatibilityVersionCheck. This variable bypasses P4 changelist comparison checks on asset load.

Fixed an issue where the /Config/ directory root paths were not resolving correctly using the FPackageName utility functions.

Structured Logging is now used in Gauntlet.

Optimization:

UE5.2 CPU minspec is now updated to SSE 4.2.

Bug Fix:

FApp::GetInstanceID will now Include instance ID in the automation InstanceName. This adds the value to the instance field in the index.json file as (hostname)-(session ID)-(instance ID).

Fixed screenshot path names in test reports for standalone/no editor mode.

Fixed inconsistencies in AITests FTestHelpers return functions.

Fixed an issue where 'ExplicitlyLoaded' plugins that were enabled-by-default were thought to already be mounted.

Fixed the supported version for TCPMessaging.

Fixed an issue in scope where a Gauntlet Test was unable to find an explicitly requested part of the preferred namespace.

Build

New:

Unreal Build Tool now sets up dependencies between compiled build module dlls so build modules can now use public properties and functions from other modules.

Added a Unreal Build Tool mode that profiles different unity sizes and returns the best size for each module.

Made several optimizations to how and when unity files are used when building.

Added the ability to Unreal Header Tool to throw errors or warnings if the generated header is not properly included or if a regular or namespaced enum does not have an underlying type specified.

Added support to Unreal Header Tool to set the underlying type for regular and namespaced enums.

TestTarget Resource folders can now exist in any of the module's locations (for example, a platform extension directory)

Added support for DefaultGameTarget and DefaultClientTarget in Engine.ini.

Added logging to GenerateProjectFiles when writing multiple project formats to indicate what is happening

For example, why ""Generating data for project indexing"" is printed twice.

Added VSMac as a default project format for Mac so it's easier to manage C# code.

Added MultiShelve UAT script that can shelve multiple changelists into a single shelf.

Added a Reopen command to P4Utils.cs

Added UAT parameters to pass architecture by target type: -editorarchitecture, -clientarchitecture, -serverarchitecture, and -programarchitecture. Keeping -specifiedarchitecture for compat, which sets the other 4 if they are not specified.

Improvement:

Overhauled Android architecture management:

Changed AndroidToolchain to properly subclass from ClangToolchain.

Removed the multi-architecture code in AndroidToolchain to instead use the high-level UnrealArch/UnrealArchitectures system.

Refactored Edit and Reopen (that take file list) into a BatchCommand function to split up huge file lists across multiple commands to respect a max command-line length.

Increased the max command-line length from 1024 to the ProcessStartInfo max of 32699.

Made Architecture a first class concept in UBT with UnrealArch type and some supporting classes. Now, an architecture is always known and supplied in UBT, and architecture is no longer an unverified string, it is an enum-like class (UnrealArch).

Similarly, multi-architecture support is now codified in the UnrealArchitectures collection. Some helper Architecture properties are available for the common case when only one architecture could ever be used (on the platforms that do not support multi).

Bug Fix:

Fixed location for UHT generated headers to not have architecture in the path, because they are per architecture.

Removed path length check for files in the Intermediate directory as these files are not portable.

Core

New:

Changed ObjectHandleTracking to use Functions instead of delegates.

Added support to low-level tests. These tests validate that ensure and check are executed. The following macros are supported in low-level tests REQUIRE_ENSURE CHECK_ENSURE REQUIRE_CHECK.

Added a tls for an ensure handler callback to let the reporting log of ensures become overridden.

Added a command line switch '-SkipVirtualized' to the ResavePackages commandlet, which will cause packages that already contain virtualized data to be skipped.

Code cleanup of ObjectHandle, changed ObjectPathId to private.

Added UE_CALL_ONCE var args support.

Added Unreal.TestAdapter to run low-level tests in the text explorer. Added atomfeed.xml to allow for auto updates.

Added an option to specify the map name to load on the command line as a named parameter -map=.

Added FTopLevelAssetPathFastLess and FTopLevelAssetPathLexicalLess function objects for performing comparisons on the FTopLevelAssetPath class.

Added additional FPackageName::ObjectPathToX functions.

Added UniqueBy function to remove duplicates from a range from a projection to apply to elements similar to std::ranges::unique.

Changed SavePackage to store the extended AssetRegistryTags for the saved AssetData into the global AssetRegistry, instead of the non-extended.

Changed updating AssetData when packages are loaded to not remove no-longer-existing tags, since these tags might be present in the extended tags. This change means that AssetRegistryTags will remain on a package until it is resaved, even if the class that added the tags is changed to no longer write the tags.

Fixed JSON Reader UTF8 encoding parsing.

Added the ability to use JSON Reader with a string view.

Updated GetWrappedObjectPropertyValue_InContainer function to allow access to any element of an entire UObject* wrapper array in one call.

Improved comments for unusual backwards-searching behavior in FString::Find.

Deprecate ISavePackageValidator and replace the feature with list of validation functions for import and exports Add a default save setting object to which validation function can be added.

Limited TVariant to 256 types in order to reduce its size.

Added the FPackageName::GetContentPathForPackageRoot function to get the filesystem path (D:/Project/Engine/Content) of a given package root (/Engine/).

Added GetAllocatedSize functions to delegate classes to aid with memory tracking.

Made various changes to TSet to make it faster to compile and simpler to follow.

Added TSharedRef::ToWeakPtr, TSharedPtr::ToWeakPtr, and TSharedRef::ToSharedPtr functions.

Activated truncation warnings as errors for the following modules: CookOnTheFly, CookOnTheFlyNetServer, PakFile, PakFileUtilities

Added more functionality to FScriptArray from TArray and fixed some incorrect usage of const correctness.

Made truncation warning fixes for multiple core modules that include: Analytics, AnalyticsET, Cbor, Serialization, XMLParser, DerivedDataEditor, DirectoryWatcher, LogVisualizer, OutputLog, and InputCore.

Changed TArray::GetTypeSize and TIndirectArray::GetTypeSize to constexpr and static types.

Added prefetch support for mobile platforms and fused all platforms into a single implementation.

Added GetAllocatedSize functions to TDeque and TPagedArray to aid with memory tracking.

Set Mac ARM cache line size to 128 in order to cater to Apple M1/M2.

Added TIsTOptional_V, TIsTUniquePtr_V, TIsTUniqueObj_V, TIsTSharedRef_V, TIsTSharedPtr_V, and TIsTWeakPtr_V traits for determining if a type is a TOptional, TUniquePtr, TUniqueObj, TSharedRef, TSharedPtr, and TWeakPtr respectively.

Split TSubclassOf into its own TSubclassOfField, so they can both use forward-declared types.

Modified the AES num bytes type to prevent truncation fixes and warnings when it is used.

Implemented priority support for the Zen Loader's loader event queue instead of just relying on io request priorities.

Added error message when FMessageDialog::Open or FPlatformMisc::MessageBoxExt function fails to create the dialog(such as when missing windows resources).

Used bit 55 to distinguish fixes from loosely allocated asset tag values in the AssetDataTagMap .

Added truncation warning fixes for multiple core modules: CookOnTheFly, CookOnTheFlyNetServer, PakFileUtilities, PakFile.

Made PropertyPathHelpers call setters and getters.

Added support for generic structs to be passed to PropertyPathHelpers.

Added TIsTEnumAsByte type trait.

ZenLoader: Matched the suspend and resume behavior of the legacy loader by using an int32 counter instead of a boolean variable.

Inherited Context grouped inherited LLM tag, mem tag and trace metadata into FInheritedContext to simplify their usage.

Added FInheritedContext to higher level tasks instead of the low-level tasks to allow batch task launch to capture the inherited context once per batch.

Added EnumerateRange(Range) function which allows ranged-for loops over a range while maintaining the index of the current element.

Simplified TTuple to aid with compile times.

Activated truncation warnings for Analytics, AnalyticsET, Cbor, Serialization, XMLParser, DerivedDataEditor, DirectoryWatcher, LogVisualizer, and InputCore.

Simplified the implementation of Cast, using std:: traits.

Updated SetWrappedObjectPropertyValue_InContainer to allow setting any part of an entire UObject* wrapper array in one call.

Changed MiMalloc to call configurable function pointers for the allocation functions so they can be overridden by the library using it to report how much memory it is using.

Added an option to return the mount point with its slash key in the FPathViews::GetMountPointNameFromPath Add unit test for that function

Changed to Mimalloc support LLM.

Defined MI_USE_EXTERNAL_ALLOCATORS macros.

Overrided mimalloc's call to VirtualAlloc/VirtualFree in order to record the amount committed and decommitted to Low-Level Memory(LLM).

Added multi-threaded access detector to delegates in order to detect concurrent access.

Implemented thread-safe multicast delegates. These delegates support Broadcast, and Add/Remove functions on different threads concurrently.

Added a ConsumeAllQueue which is based on a Stack because the Queues have livelock issues and the Stack provides a robust alternative.

Added a class to read zip archives and ZipArchiveWriter using libzip in the ZipArchiveReader.

Changed the behavior of FGenericPlatformMemoryStats::GetMemoryPressureStatus on Windows. It now uses the QueryMemoryResourceNotification instead of the generic implementation.

AssetManager GetPackageCookRule: Change NeverCook behavior and added new values to the EPrimaryAssetCookRule enum. NeverCook, DevelopmentCook, and DevelopmentAlwaysCook now specify exclusion from the cook only for the assets that are directly referenced from the PrimaryAsset.

EPrimaryAssetCookRule::DevelopmentAlwaysProductionUnknownCook represents the new possibility that an asset is always cooked in development because it is referenced from a DevelopmentAlwaysCook PrimaryAsset, but it may still be cooked in production because it is an indirectly referenced asset from that DevelopmentAlwaysCook PrimaryAsset.

renamed TDepletableMpscQueue to TDepletableMpmcQueue as it supports multiple concurrent consumers.

Updated existing use cases to use the new name or to switch to TConsumeAllMpmcQueue if the order of consumption doesn't matter. Added IsEmpty function to TConsumeAllMpmcQueue class. This concurrent queue will be deprecated in UE 5.3, please use the TConsumeAllMpmcQueue instead.

System semaphore is added to all supported platforms and can be used for multithreading synchronization. The main benefit comparing to other synchronization primitives is that on some platforms semaphores can wake up multiple threads faster than using individual system events.

Config-related delegates were made thread-safe as they are accessed concurrently during async config loading.

Changed FString::Contains, FString::Find, and TCString::Stristr to return success when the Find argument is an EmptyString when called with ESearchCase::IgnoreCase. This change makes the IgnoreCase behavior match the CaseSensitive behavior, and match the behavior of standard library strstr. But this will break call sites that were expecting Contains("") to return false, and those call sites will need to be changed as they are discovered.

Made FProperty::ShouldSerializeValue easier to debug.

Added -JsonStdOut param to write structured log output to stdout when used with the -StdOut param.

Added serialization of Compact Binary to WIDECHAR JSON.

Added serialization of Compact Binary fields and arrays to JSON.

Added LaunchTaskInThreadPool to the DDC as a replacement for the two existing thread pool task requests.

Added FSkinWeightLookupVertexBuffer::GetLookupData function to access raw lookup data.

Both OAuthProvider and OAuthProviderIdentifier can now be used in the same configuration for the HttpCacheStore.

Added a -DDC-VerifyFix command to overwrite existing records and values that differ from newly generated records and values.

Added support for logging structured debug output as a JSON file when the named mutex UE_LOG_JSON exists on Windows, or when -JsonDebugOutput is present on the command line.

Added support for Base64URL encoding.

Added DerivedDataTool as a new program to work with DDC, initially loading and saving cache replays.

Added an API to request compressed data from derived data references.

Added a DDC delete-only mode to the file system cache to allow unused caches to be cleaned up over time.

Exec APIs have been added to implement exec command handling for development and editor builds only.

Improvement:

Improved comments and special member functions in TSubclassOf.

Minor improvement to handling first in and first out (FIFO) order of task subsequents.

Optimization:

the StreamableManager class OnPreGarbageCollection function has been optimized.

Optimized processing of canceled background tasks by skipping the thread priority change.

Optimized UE_LOG based on UE_LOGFMT.

Crash Fix:

UEngine::CorrectNegativeTimeDelta will no longer crash on negative delta-time.

Fixed crash in IoDispatcher when requesting reads of 0 bytes.

Fixed a crash when duplicating a component for a copy to the clipboard by not forcing a specific name.

Fixed a crash on exit when initialization fails before the command line is set.

Bug Fix:

Removed artificial 64B max alignment limit from TAlignedBytes and TTypeCompatibleBytes.

Fixed MB3 Realloc from reading out of bounds.

Fixed an issue where weak object pointers are invalidated when re-creating a UObject with the same name.

Fixed an issue where a UObject intended to replace another UObject in the object array could get a new internal index if other threads were creating objects simultaneously.

Fixed LLM method FindTagDisplayName to lookup for the platform and project-specific tag names.

Fixed the generation of duplicate bulk data identifiers when creating new levels from templates containing bulk data payloads.

Fixed the OriginalObjectPathName variable from not being set if a LabelOverride was provided in the constructor of the FUObjectToken class.

Fixed the Editor on Windows to prevent loading all debug symbols and consuming a large amount of memory when resolving a first callstack before a load/unload module.

Updated FPaths::Combine function to work with the FStringView type.

Fixed StaticFindObject and ResolveName bug when searching for a sub-object in a specified object, and the subobject has the same name as a short script package name.

Added flexibility when specifying the project name on the command line. Previously, it was expected to be the first argument, which was difficult to ensure in all launch scenarios.

Fixed PropertyPath Not working with TEnumAsByte types.

Fixed memory leak located in the DepletableQueue as the last node was never deleted and made an accidental concurrent call to Deplete not catastrophic.

Enabled SplineComponent to have accurate bounds calculations on the server in exchange for a minor performance penalty when the bounds are first checked.

Replaced complex metaprogramming in FName with TStringView overloads.

Fixed TJsonPrintPolicy::WriteString from doing UTF-8-incompatible conversions.

Fixed double destruction in Tasks System that was causing repeating "task destroyed" traces in Task Insights.

Fixed CPF_HasGetValueTypeHash from not being set on a FBoolProperty.

Set a limit on the number of reference gathering when printing invalid references during save to avoid pathologically expensive cases.

Fixed CopyTemp from returning a reference instead of a copy when passed an rvalue reference (which can cause dangling references).

Fixed piping order to be First-in, first-out(FIFO) in an edge case where multiple piped inline tasks depend on the same prerequisite, so when the prereq is completed they all get piped.

Fixed differing behavior between ScriptInterface and when ScriptInterface is not a nullptr in some cases.

Fixed %hh* formats in FGenericWidePlatform::GetVarArgs. Added defensive checks against snprintf from returning a failure code.

Fixed TIsTSubclassOf for cv-qualified types.

Fixed Low-Level Memory(LLM) race condition in MB3 FreeExternal.

Improved comments on SerializeBin and SerializeBinEx to clarify that binary serialization of deprecated properties can cause problems.

Fixed a deadlock caused by double busy waiting, one in audio pipe suspension and another in the scheduler.

Fixed TTuple natvis visualization.

Made FBoxes' IsValid flags editable, otherwise editor modifications will not be saved.

Ensure that a page in the TPagedArray never shrinks below PageTraits::Capacity in TPagedArray::SetNum.

Fixed SelectRandomWeighted algorithms from not working with floating point value weights by initializing the accumulation with the appropriate zero types.

Forwarded payload parameters through the delegate API rather than copying to allow non-copyable types like TUniquePtr to be captured.

Fixed Clang static analysis false positives in our operator delete overrides.

Added a static_assert to stop data loss when constructing a TBox from TVector extents.

UClass::TryFindTypeSlow will now properly handle "None" names (NAME_None converted to string.)

Added checks to ensure that TArray's bulk-serialized data sizes match expected sizes.

Removed TNonNullSubclassOf's dependency on TSubclassOf::TClassType to avoid needing the full type definition for T.

Fixed a rounding issue with FDateTime::ParseIso8601.

Fixed TStringConversion's broken move constructor by making the class non-movable and non-copyable.

Changed OodleDataCompression scratch buffer count and size to match usage by the engine.

Added a Target.bAllowExecCommandsInShipping UBT flag to disable execute commands in shipping builds. It currently defaults to false.

Fixed DDC untagged allocations by capturing tags in tasks.

Fixed AsFieldView() function in CompactBinary to exclude names as expected.

Disabled prescanning of ini files for plugins on desktop platforms as it may end up slowly Saved and Cooked.

Fixed the DDC file system cache EditorOverrideSetting not handling paths with the '\' character in them.

Fixed thread safety of Engine.SuppressWarningsInOnScreenDisplay.

Fixed a race condition in the DDC cache hierarchy that caused failed assertions.

CompactBinary: Fixed LoadCompactBinary to gracefully handle read failures and sizes larger than the archive.

Fixed unsafe type cast warnings when moving from an array with a larger size type.

Fixed an issue where garbage references from the function UE::GC::RegisterSlowImplementation would report a random UObject as the referencer, rather than the owner of the AddReferencedObject function.

Deprecated:

Deprecated PRAGMA_DISABLE_OPTIMIZATION and PRAGMA_ENABLE_OPTIMIZATION macros and replaced them with UE_DISABLE_OPTIMIZATION for temporary development and UE_ENABLE_OPTIMIZATION_SHIP.

Deprecated all global variables of thread-safe delegates from FCoreDelegates and replaced them by functions returning local static singleton. Thread-safe delegates are not zero-initializable and can't be used as global variables because they are vulnerable to a static initialization order.

Deprecated the older TDepletableMpscQueue name.

Deprecated TIsSame.

Deprecated TIsVoidType.

Deprecated TAreTypesEqual and ARE_TYPES_EQUAL.

Deprecated some stat methods that take a TArray argument and provided a version with TArray64 to handle big stat files.

Removed:

Removed obsolete warning message about old hardware.

Dynamic LocalQueue Management.

Removed the use of some deprecated intrinsic type traits.

Removed TContainerTraits.

Removed deprecated alignment-unaware functions from FScriptArray.

TAllocatorTraits::SupportsMove function because it is always assumed to be true.

Dev Tools

New:

Added the ability to define USE_COMPILED_IN_NATIVES outside of the HACK_HEADER_GENERATOR macro.

Added a check in the C# UHT code generator to verify the end of the macro text is as expected.

Added support for regression and other column filters in PerfReportTool.

Additional column filters can now be created by implementing ISummaryTableColumnFilter and adding it to the list in Program.MakeAdditionalColumnFilters.

Moved stat threshold checks into an additional filter.

Added a column filter to hide metadata columns.

Added a column filter to only show columns where the most recent build has regressed by more than a given threshold.

You can now use debugShowFilteredColumns to have columns be grayed out instead of removed. Hovering over them will show the reason they were filtered out (which filter and the reason). This is for debugging purposes and sanity checks to make sure you're not missing important information, especially when iterating on new filters. Some additional settings were added to SummaryTableColumn to support this.

Filters can also mark individual cells as 'invalid' to indicate they are not taken into consideration for that filter. These are grayed out with a tooltip when debugShowFilteredColumns is enabled. Currently this does not work in collated views.

Added the ability to set tooltips for column headers.

Added the ability to add a color modifier for the entire column or individual cells.

Added level editor extensibility hooks to Turnkey.

Changed eligible platforms to use ANSI for profiler strings to reduce the required amount of additional memory. Profiler strings previously used wide strings because ANSI strings incurred a conversion to a wide-char in order to use the wide API, but the API has since been fixed.

Added a new UAT script: SyncPerforceServers. This script helps you to safely mirror a stream on one perforce server with another. See SyncPerforceServers.cs for more information.

Added support for packaging of programs with BuildCookRun by way of adding a .uproject file.

See SlateUGS.uproject for the format and location for making your own.

Use -skipcook when running BuildCookRun to package a project:

BuildCookRun ... -build -skipcook -stage [-pak] -package

To use .pak files with Programs, you need to add "PakFile" to the program's .Build.cs file dependencies.

Added CreateObjectList to StringUtils. This is helpful for refactoring in other code, but it can also be a useful utility function for printing lists of objects.

Added FComparableImage::LoadFile and FComparableImage::LoadCompressedData to help compare images that are only in-memory.

Improvement:

Improved Live Coding startup time to make starting the console an asynchronous task.

Improved detection and logging for circular includes in C# UHT.

Updated budget color scheme to match auto for PerfReportTool.

Bug Fix:

Fixed an issue in C# UHT where, if a structure referenced itself, it would end up in an infinite loop.

Fixed an issue where C# UHT was not generating errors with unsupported blueprint member types.

Fixed an issue to enable settings objects to be properly handled by LiveCoding and HotReload.

Fixed an issue in C# UHT where circular base class/structs would hang UHT. UHT now generates an error showing the circular bases.

Fixed an issue where, if a console variable changes a compilation module during live coding, then the engine will no longer assert.

Fixed an issue where UBT failed to detect C# UBT plugins in the game folder.

Fixed an issue where the console key would not work on some international keyboard layouts when the Game Features plugin was used.

Fixed an issue in C# UHT where it would fail to generate an error when preprocessor lines appeared in an inheritance list.

Fixed an issue where the Live Coding Console would fail to properly enable when it is started on demand.

Fixed an issue where UHT didn't properly detect circular structure definitions via TArray.

Fixed C# UHT issue where a class scoped delegate reference from another class would fail.

Fixed Live Coding issue where, if a typo was made in the preloaded module list, the game would hit a breakpoint.

Fixed an out-of-bounds exception with the changes command in the UnrealGameSync CLI tool.

Fixed performance issue with shadow detection and symbol lookup.

Fixed C# UHT to generate errors when UPROPERTIES are located in native interfaces.

Fixed C# UHT to properly detect an overridden function when they differ only by case.

Fixed issue where a class might not be marked as containing instanced items.

Fixed an issue where C# UHT failed to generate an error when a property in a structure referenced a deprecated class and the property had not been marked as deprecated.

Stopped creating the accounting job object with JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE. The main job object is already managing those processes and it caused mspdbsrv to be terminated while in use by CL as it is a shared process.

Removed:

Removed HACK_HEADER_GENERATOR #define since C++ UHT has been deprecated and no longer uses engine classes.

Insights

New:

Added support for load time tracing in the editor.

Unreal Insights now implements a diff mode for csv tables.

Added raw snapshot export for the MemoryAllocTable.

Added ImportTable/DiffTables to the StoreWindow.

Added UntypedDiffTable Widget.

Added MergeService to merge two tables together.

Added support for Unknown-type wildcard name patterns for regions specified to ExportTimerStatisticsAsText API.

It is now possible to specify the following export command: TimingInsights.ExportTimerStatistics C:\Out\Region*.CSV -region="SameRegion,Game*,OtherRegion" and it is expected to produce the following files: C:\Out\Region_SameRegion.CSV C:\Out\Region_Game_[...]

Added the ability to send a trace snapshot to a server using console command Trace.SnapshotSend. A snapshot is the content of any events in the tail buffer along with the important events needed to analyze them.

Improved the CPU timing scopes for module loading. It now uses CPU timing events with name of module as metadata.

Created the Insights Status Bar Widget. This widget is displayed in the bottom right corner of the Unreal Editor and provides the user the controls of the trace system. The widget is implemented as a plugin that is enabled by default.

API improvements

The Trace.Screenshot command can now be called using only the ShowUI parameter.

Added CallstackId for all free events including HeapMarkAlloc and HeapUnmarkAlloc events.

Increased Memory Trace trace version to 2.

Surface error messages from analysis engine to the user. Previously, we relied on the regular log to indicate problems in analysis. We now use MessageLog functionality which is routed to a visual log representation inside the application.

Added fake allocations for free events without a matching allocation event in Memory Insights. These allocations will have zero size and the same callstack as the free event.

Added support to reset highlights for timing events by double clicking on a highlighted event. Double clicking on an empty space resets the highlight.

Implemented analysis for "MetadataStack.ClearScope", MetadataStack.SaveStack" and "MetadataStack.RestoreStack" trace events.

Added analysis support for the new trace protocol 7 that provides scoped events with absolute timestamp values.

Runtime: Tagged the large memory allocations from FReserveScheduler::StartWorkers with the "EngineMisc" LLM tag. Previously it was tagged randomly by the first system that triggers the initialization.

Fixed a trace rename message from displaying the updated name twice in the Session Browser.

Changed the scoped trace events with time to use absolute timestamp values.

Increased trace protocol to version 7.

Implement diff mode for csv tables.

Added raw snapshot export for MemoryAllocTable.

Added ImportTable/DiffTables to StoreWindow.

Added UntypedDiffTable widget.

Added MergeService to merge two tables together.

Improvement:

Improved note about initial channels in the Connection tab of the Session Browser.

Improved performance of OutputBeginDynamicEvent by using a better hash function for dynamic scope named hash maps.

Changed the read buffers to increase their size by a power of two steps to Improve trace analysis performance.

Optimization:

Refactored UntypedTable to support importing tables without having a tracing session opened.

Refactored UntypedTable to support opening without opened session.

Bug Fix:

Fixed metadata for a pinned stack of multiple entries (like being added in reverse order).

Fixed log spam when filtering the LogView in Animation Insights.

Added a workaround for large utrace streams with corrupted serial sync events (detects when too much data is buffered on one thread and stops analysis automatically).

Fixed "SameValue" aggregation for string columns.

Fixed sorting for string columns to be case insensitive and to sort undefined values first.

Fixed sorting by Module Name column and by Symbols column to be case insensitive.

Added detection for CPU timing events with metadata with timestamp older than regular cpu timing events. Time needs to increase monotonically for cpu timing events.

Cleared metadata stack for ProgramSize allocs in Memory Insights.

Removed:

Removed Insights menu items from the Tools menu as the functionality has been moved to the Insights Status Bar Widget.

Framework

New:

Media sources can now be previewed in the editor.

Added replication support for FInstancedStruct.

Added HDR playback capabilities to MediaFrameWork and Electra.

Bug Fix:

CommonUI buttons now hide their default input prompt when becoming disabled. This fixes an issue where multiple prompts could appear after buttons are disabled and re-enabled.

Fixed Image Sequence frames from being cancelled when they should not be.

ProcessEXR now preserves data and display windows.

Fixed garbage collection on FInstancedStruct that contains a struct that requires call to the AddStructObjectRefences struct.

Fixed an Asset Registry to skip devonly tags. FString::Split retuns false if no delim substring found.

Deprecated:

Removed deprecated per-chunk SetChunkInstallDelgate and RemoveChunkInstallDelgate functions from the chunk installers.

Removed:

Removed const type from FInstancedStruct mutable getters to prevent mutating const instanced structs.

AI

Bug Fix:

Fixed an issue where a null PathFollowingComponent was being created by default for an AI Controller.

Fixed an issue where a Behavior Tree decorator with a lower priority abortion type on a subtree was not being reactivated upon exiting the subtree.

Fixed an issue with Blueprint base decorators where they would trigger an execution request during a transition. This would return an incorrect answer. Decorators are now using new API methods to request either a RequestBranchActivation or a RequestBranchDeactivation.

Deprecated:

PawnActions have been deprecated. Users should use GameplayTasks or AITasks starting this release.

AI Behavior Trees

New:

Blackboard-based decorators can now use none values, instead of the first key when the referred key no longer exists. To use this behavior by default, add the following line in the configuration file:

[/Script/AIModule.AISystem]

bBlackboardKeyDecoratorAllowsNoneAsValue=true.

Disconnecting the root node of a Behavior Tree will now disable the tree.

Modified BTTask_FindAndUseGameplayBehaviorSmartObject to support finding a target Smart Object with an EQS query.

Improvement:

Blackboards now support more than 255 entries.

Bug Fix:

Fixed an issue where the Behavior Tree component was not redirecting its Visual Logger to the owning AI Controller if the component was dynamically added as part of AAIController::RunBehaviorTree.

Fixed an issue where the Blackboard editor was not clearing out the display of all persistent keys when it was parented with an asset that had the same named keys.

AI Debugging

Bug Fix:

Fixed an issue where the expanded subcategories in the Visual Logger were not being preserved while scrubbing the timeline.

Fixed an issue with Visual Logger not recording world-less UObjects.

Fixed an issue where GameplayDebuggerCategory was not replicating correctly for standalone clients.

AI EQS

New:

Added a Smart Object EQS generator and a dedicated EQS item type.

Bug Fix:

Fixed an issue where UEnvQueryTest_Project's navigation projection was not applying the ProjectionData.PostProjectionVerticalOffset.

AI Navigation

New:

Added a warning message when exporting a geometry component with too many vertices. A customizable warning threshold can be specified through the GeometryExportVertexCountWarningThreshold property.

UNavigationSystemV1::PerformNavigationBoundsUpdate is now a virtual function.

Changed "Navigation data generation finished" log to verbose to avoid repeated log messages when moving a Static Mesh in the automatic navigation update mode.

Added a display option to display navmesh tile resolution.

The World Partitioned Navigation Mesh now uses the required overlap from the Navigation System instead of using a constant value.

The Navigation Mesh now uses the same Oodle compression settings in the Editor to match its usage during gameplay.

Reduced the include dependencies for NavigationTypes.h

Added Navigation Mesh and Navigation System information to the screen when the Navigation Display is enabled. The following information was added:

Added the bDrawTileBuildTimes property to display the last tile build time

Added the bDrawTileBuildTimesHeatMap property to display the Navigation Mesh as a colored heat map of tile build time

Added draw distance clipping for Navigation Mesh label rendering

Added profile tags in the NavMeshRendering Component

Allowed DebugLabels to be displayed in 2D on screen

Added tile building statistics to the Navigation Display

Added partitioning type to the Navigation Display

Added Navigation Data count and triangle count to the Navigation Display

Added Profile Tags in the tile generation to the Navigation Display

Deprecated unused FRecastNavMeshGenerationProperties.

Added initial support for a mix of low, default and high resolution tiles on the Navigation Mesh.This update includes the following changes:

CellSize is now deprecated in favor of CellSizes, which store the various tile resolutions in the NavMeshResolutionParams array of ARecastNavMesh.

Added the NavMeshResolution property to ANavModifierVolume.

Removed duplicate data in dtNavMesh.

Added a resolution index to dtMeshHeader.

Increased the Navigation Mesh version to reflect the updates.

Made it possible to configure a project to not instantiate AvoidanceManager at all.

Improvement:

Removed unnecessary extra Agent radius tile expansion when computing tile bounds. This avoids unnecessary collision gathering, as well as prevents unnecessary tile dirtiness.

FPImplRecastNavMesh::GetNavMeshTilesIn now uses FRcTileBox to find the minimum and maximum tile coordinates.

Changed the navigation geometry export warning to be based on triangle count. This avoids repeating the warning multiple times.

Bug Fix:

Fixed an issue where the Navigation Mesh was generating incorrectly around Hierarchical Instanced Static Meshes.

Fixed an issue where UNavMeshRenderingComponent was not clearing labels when they were turned off.

Fixed an issue where a NavModifierVolume would incorrectly dirty a tile below itself if it was within an Agent's radius. Added the console command n.UseTightBoundExpansion to revert to the previous behavior as a fallback.

Fixed an issue where navigation bounds were not being updated on load when "Update Navigation Automatically" was disabled. This fixed World Partitioned Navigation Mesh data chunks not being generated for areas covered by NavMeshBoundsVolume that were placed inside Data Layers.

Fixed an issue where MassAvoidanceProcessors was producing a static analysis warning.

Fixed an issue where FPImplRecastNavMesh::TestPath would crash Lyra if the TileWidth of the loading Navigation Mesh was a mismatch.

Fixed an issue where the navigation octree would not fit the navigable world bounds.

Fixed an issue where the Navigation Mesh generation was not working for ULandscapeHeightfieldCollisionComponent in Lazy gathering mode. The sample cache was not reset in RecreateCollision.

Fixed an issue where the NavigationRelevantData array was being modified during garbage collection leading to a crash.

Fixed an issue where a partitioned Navigation Mesh was being created for non-world partitioned worlds.

AI Perception

New:

Added the OnTargetPerceptionForgotten delegate to UAIPerceptionComponent.

AI Smart Objects

New:

Made the following changes to Smart Objects:

Removed the synchronization logic between the ability system component and Smart Object instance tags.

The SmartObject subsystem has been added to the SmartObjectWorldConditionSchema.

Added support for world conditions to the main Smart Object instance (in addition to those in each slot). Note that slots could be disabled by their parent conditions.

Removed the object tags filter from the definition and replaced it by the newly added condition (FWorldCondition_SmartObjectActorTagQuery)

Updated the SmartObject blueprint library with the following:

Renamed 'K2_SetSmartObjectEnabled' to 'AddOrRemoveSmartObject' since 'Enabled= false' is a concept used when the object is no longer available for queries, but active interactions can finish.

Added functions to add and remove Smart Objects from the simulation for one or multiple Actors.

Added functions to enable and disable Smart Objects for one or multiple actors.

Added the ability to transform Smart Object annotations in the Smart Object editor viewport.

Added the custom show flag "SmartObjects" and bound it to the SmartObjectSubsystem rendering (disabled by default).

The SmartObjectDefinition validation now reports errors when saving the asset.

Made the following changes to Smart Objects:

Added per slot Runtime Tags.

Added common event handling for Smart Object and slot changes and events.

Added slot annotations, which are slot definition data that can have visualization.

Changed Smart Object Disable to send an event, instead of calling Unclaim and stopping the behavior.

Added more visualization support for the Smart Object editor (canvas, visualize annotations).

Changed the Smart Object editor to use the common transform widget for slots.

Completed Smart Object Collection rework which includes the following:

Introduced a new FSmartObjectContainer type that encapsulates SmartObjectComponent registration and storage.

The SmartObjectSubsystem now stores a Container that aggregates all other containers supplied by loaded / streamed in SmartObjectPersistentCollection instances.

The SmartObjectCollection got deprecated and there's an auto-update path triggered in SmartObjectCollection::PostLoad.

The SmartObjectComponent component can opt out of being part of a collection with bCanBePartOfCollection.

SmartObjects can only be registered with a single Collection. This might change in the future if required.

SmartObjects keep track of whether they are registered as a part of a collection or as a dynamic Smart Object.

Updated the SmartObjectComponent's SOHandle setting and resetting - there's a separate function for invalidating the handle.

Added handling for the destruction of a SmartObjectComponent (as opposed to unregistration due to being streamed out, potentially temporarily).

The SmartObjectSubsystem no longer instantiates on clients.

Added the asset name to the error logging reported by USmartObjectDefinition::Validate.

Made SmartObjectDefinition verification execute every time there is a change to the definition and on SmartObjectDefinition load.

Extended AITask_UseGameplayBehaviorSmartObject with OnSucceded, OnFailed and OnMoveToFailed delegates. These delegates allow users to better react to movement failures.

Deprecated ESmartObjectUnregistrationMode and its use in SmartObjectComponent registration and deregistration. Introduced two explicit paths for Smart Object removal:

Unregister - Keeps or deletes the runtime Smart Object information based on SmartObjectComponent.RegistrationType.

Remove - Called on the Smart Object's EndPlay. Removes runtime data regardless of the registration type.

Improvement:

Made changes to simplify the process of Registering, Unregistering, and Binding of a SmartObjectComponent to a RuntimeInstance.

Bug Fix:

Fixed an issue where a misconfigured Smart Object would partially register if it had a SmartObjectDefinition asset set, but the asset was not valid itself. This resulted in an ensure failure while cleaning up the system on world end.

Fixed an issue in USmartObjectSubsystem::CleanupRuntime where removing a Smart Object was causing an error.

AI State Tree

New:

Made the following improvements to StateTree event handling:

Added the option for Tasks to disable ticking, or to be ticked only when there are events.

Added new options for Task handles when properties are copied.

Added TStateTreeInstanceDataStructRef which can be used to access struct-based instance data in delegates.

Added the callback FStateTreeNodeBase::Compile, which is called during compilation when a node and instance data can be checked and adjusted by the node, e.g. to validate data.

Added a getter and a delegate to the State Tree Component GetStateTreeRunStatus method.

StateTree now uses a hierarchical GameplayTag match when matching event transition tags.

When a StateTree subtree returns succeed or failed, it handles it as if the linked state was completed.

Added save options to the State Tree editor compile button.

Added a setter method for the auto start property in the State Tree component.

Improved State Tree transition handling with the following changes:

Delayed transitions now trigger N seconds after the first time the conditions pass (old behavior required the conditions to pass for the duration of the delay).

Added a random variation setting for the transition delay.

Tick and Event transitions have precedence over completion transitions (that is, they are handled before completion transitions).

Removed the delay and blocking from completion transitions.

Added the ability to request State Tree state transitions via code.

Exposed the State Link which allows a user to specify a target state as a property.

Completion transitions now trigger at the state where the task that completed is located. E.g. If execution is currently at Root/Guard/Leaf and the task at Guard state completes, transitions on Guard and Root state are handled (skipping Leaf).

Bug Fix:

Fixed an issue where calling Start on an already executing State Tree would cause a crash.

Fixed issue that limited the number of State Tree tasks to 254.

Fixed an issue where BeginPlay in the State Tree Component would cause a crash if it had an empty asset.

Added several fixes to the property binding for enum conditions.

Fixed an issue where UObject-based State Tree nodes were not copied and pasted correctly.

Fixed an issue with StateTreeNodeBlueprintBase::GetWorld to add support for Blueprint nodes that rely on retrieving world from the WorldContextObject.

Fixed an issue with the State Tree editor where expanded states were not being preserved when new states were added.

API

New:

Exposed the World Partition grid helper and StreamingGrids member variables from the WorldPartitionRuntimeSpatialHash. This allows classes to derive and create dynamic grids at runtime.

Audio

New:

Added the Get Modulator Value Blueprint function, which enables you to take values from any modulation source or control bus and use them to drive other game parameters.

Added two new Blueprint functions (Get Modulators From Destination and Audio::SetModulationRouting) to improve the UX of changing the Modulation Routing on an Audio Component:

Added Listener Orientation and Source Orientation audio parameter interfaces for audio sources.

Added the Create Envelope Follower Generator and Create LFO Generator Blueprint functions.

[Source Data Override Plugin] Added OnAllSourcesProcessed to enable functions to execute after all of the sources have been processed.

Added a MetaSounds unit test helper which builds a graph and operator from node names.

Added a debugging MetaSound node that triggers when a NaN is detected, Trigger On Nan.

Added a new MetaSounds node, Switch and Ramp, for smoothing out popping audio.

Added hard reset capability to the MetaSounds AD and ADSR Envelope nodes.

Improvement:

Changes to Modulation Routing now apply immediately to currently playing sounds.

Moved all Audio Modulation Blueprint functions to the Audio > Modulation category in the Blueprint Action Menu.

Widgets can now be registered at module startup so that specific transformation UIs are instantiated in the Waveform Editor.

Transformation widgets in the Waveform Editor now support property handles.

Exposed Audio Motor Sim Component data as editor-only blueprint readable data so the state can be queried by Editor widgets.

The Audio Component Group parameter subscriptions can now be added from Blueprint.

Changed the Audio Modulation Debug console variable prefix from "SoundModulators" to "Modulation" (ex. au.debug.modulation.filter.buses).

Added Trigger type to the Audio Parameter type enum so they can be differentiated from Boolean parameters.

The FAudioParameter class now has a new constructor that takes an EAudioParameterType enum, which can be used to create Trigger parameters explicitly.

Reduced editor load time by lowering the refresh rate of AudioCookOverrides.

Crash Fix:

Fixed a crash that could occur when a SoundWave with a Force Inline loading behavior had its SoundCompressionSettings altered during playback.

Fixed a crash caused by a missing parameter on FWindowsMMDeviceCache::OnDeviceRemoved.

Fixed a crash caused by audio capture components during level transitions.

Bug Fix:

Parameter subscriptions fire reliably regardless of the method of setting the parameter.

Fixed a bug where importing an Impulse Response asset incorrectly threw an error in the Output Log.

Fixed bug causing some MetaSound properties to be unintentionally reset when changing data type or constructor pin state

SoundWaves no longer synchronously load during USoundWave::PostLoad on packaged builds.

Fixed a playback bug that occurred when bypassing a Source Effect Chain entry in the same game frame the sound is played.

Fixed a bug where MetaSounds reroute nodes could have incorrect values when chained and created from node inputs.

Fixed a bug where fixed MetaSound ADSR audio multiply nodes could produce NaN values.

FindAllMIDIDeviceInfo now behaves as expected.

Fixed a bug that caused audio file cooking to produce slightly different data than prior versions.

Fixed a bug in MetaSound where Audio Bus Reader nodes might behave unexpectedly when the AudioCallbackBufferFrameSize is set to a value other than the default.

Fixed unintended behavior when creating MetaSound variables on a graph that has been converted from a preset.

Deprecated:

Deprecated CreateCompressedInfo path and GetRuntimeFormat in favor of IAudioInfoFactoryRegistry.

Removed:

AudioThread and StatsThread have been removed after being deprecated in 5.0.

Blueprint

New:

Exposed ToHex to Blueprints for LinearColors.

Added console variable bp.BlamePrintString to help track down which Blueprint Asset and function is printing messages to the screen.

Made latent Blueprint nodes more descriptive in Tooltips.

Added Latent Blueprint info to Aync task nodes.

Added Implemented Interfaces to asset diffs.

Added proper support for null dynamic Blueprint delegates to struct pins and struct default values. This makes it easier to use non-multicast dynamic delegates in blueprint logic for optional bindings

Implemented a UPluginBlueprintLibrary for querying info about plugins from Blueprint and Python.

The core Unreal math type TRay and FRay is now exposed to Blueprints for use as a UProperty.

Improvement:

improved overall stability of the Asset Diff tool.

Bug Fix:

Fixed bug where Adding and Renaming collapsed graphs in functions breaks references to local variables.

Fixed inefficient memory usage in Blueprint Debugger tooltips.

Fixed issue where re-instantiated classes are available in the class reference drop-down.

Fixed a bug that occurred in the Blueprint Diff toool when re-linking diffrent pins to the same nodes.

Blueprint Compiler

New:

Added a UPARAM(Required) markup for marking function parameters as required This must be linked to another node in a Blueprint.

Crash Fix:

Fixed a crash in UKismetSystemLibrary::execSetStructurePropertyByName.

Bug Fix:

Fixed promotion operator pins from not being able to find the appropriate promotion.

Fixed a Blueprint Compiler Error when compiling ExposeOnSpawn variables with a BlueprintSetter function.

Fixes for Vector wildcard that does not cast from integer to float (double-precision) when the vector pin is split or utilized by Promotable operator nodes that permit pin links of mismatched types such as int to float.

Subobjects are now uniquely instanced when importing default value terms to non-native class variable properties on the new CDO during a Blueprint compile.

Fixed a bug that could cause reinstanced classes to leak onto object literal pins.

Deprecated:

Deprecated float and double cast nodes in Blueprint.Several single-precision float conversion functions were deprecated in favor of their double counterparts, which we can safely redirect.

Deprecated FBlueprintEditorUtils::RegenerateBlueprintClass function, a long unused entrypoint for Blueprint on load compilation.

Blueprint Editor

New:

Added Browse to Type to the context menu of a variable in the Blueprint Editor details menu. This is available when the type of a variable is a Blueprint class.

Blueprint editor feature (experimental): Non-blocking Blueprint graph context menu invocation:

When enabled, invoking the context menu in a Blueprint graph will not block the UI for long periods waiting for its menu content building to be completed.

This can improve editor UX for content creators in large projects with significant Blueprint class assets.

Disabled by default. To enable, navigate to Editor Preferences->Blueprint Editor Settings->Experimental and set "Enable Non-Blocking Context Menu" to true.

In the Blueprint editor pins now consistently sort pin connections where the gateway node is being called when performing "collapse to graph", "collapse to function", or "collapse to macro" operations

Fixed a bug where clicking "Find References" on the Custom Event sidebar would search for "None"

Blueprint functions can now be marked as Unsafe During Actor Construction. This prevents their use during Actor construction scripts.

Improvement:

Improved Blueprint editor startup time by deferring palette/favorites list construction to when the Palette tab is first spawned.

Minor improvements have been made to Blueprint graph context menu performance.

Improved tooltip on function call nodes when a function cannot be resolved

Crash Fix:

Fixed an editor crash caused by reinstancing a transacted Animation Blueprint outered to a reinstanced Actor-based Blueprint with a Skeletal Mesh component.

Bug Fix:

Fixed the component hierarchy display in the Actor instance details tab to remain static and deterministic in terms of tree node order after its underlying Blueprint class is compiled and/or Actor reconstruction occurs.

We now avoid doing a full Blueprint action database refresh on the next UI tick after incurring one or more dynamic module loads in the editor.

Fixed a regression in which duplicate Add Component actions were being shown in the Blueprint graph right-click context menu when Context Sensitive was enabled.

Added custom setters to mark an arrow component's render state as dirty when writing to attributes cached by its scene proxy from a Blueprint function.

Blocked non-array container pin types from being connected to self pins on node types that support a foreach-style call site expansion. This avoids a runtime editor crash that may otherwise result due to a lack of compile-time expansion support for non-array container types.

Updated the Kismet Execution function to skip over pending garbage and unreachable objects.

Blueprint Runtime

New:

Added IsPluginMounted function to the PluginBlueprintLibrary.

Bug Fix:

Fixed a source of runtime stack corruption while executing a compiled Blueprint graph with one or more direct interface self pin connections on call site nodes for implemented interface functions.

FixedInconsistent behavior in root component transform scale values for dynamically-spawned Blueprint Actor instances.

Fixed a bug with script Let commands when a custom setter is used on a property. When SetValue_InContainer is called, we need to ensure that we use the property container associated with the l-value in the assignment.

Gameplay

New:

Added GameplayTargetingSystem Plugin.

Added custom serialization support for GameplayTag Queries.

Added support for replicating derived FGameplayEffectContext types.

Added an experimental Gameplay Graph plugin. It currently supports creating an undirected graph and running a few fundamental graph algorithms.

Added character movement UseBaseRelativeAcceleration option to use base-relative moves when walking on dynamic bases. This greatly reducing corrections while on the base, with higher risk of a correction when jumping on and off.

Changed the access level of UConversationInstance::GetCurrentChoiceReference from private to public. This allows conversation task nodes to easily access choice memory. This empowers the user to create one conversation task node that can generate multiple choices with unique data so that each dynamic choice can be processed accordingly.

Added overridable tick function to allow server-side functionality on remote autonomous proxy characters.

Added UGameplayStatics::IsAnyLocalPlayerCameraWithinRange function to allow Blueprints to prune behavior that is out of range of any local player.

Added success / fail return value to Actor's class AttachToComponent and AttachToActor functions.

Gameplay Attributes in assets are now registered as searchable names on save, allowing for references to attributes to be seen in the reference viewer.

Added a class picker for Input Action and Input Mapping Context factories.

Allow changing the evaluation channel of a Gameplay Effect Modifier from code.

Added some basic unit tests for the AbilitySystemComponent.

Added a slate notification when a gamepad's state changes in the editor. This displays the Platform User, Device ID, and connection state.

Users can now specify what Input Trigger events progress/cancel a Combo Trigger.

Clamped Input Modifier dead zone values between 0 and 1.

Users can now Drag and Drop Input Actions from the Content Browser into the Blueprint Graph to make an Enhanced Input Action in the graph.

Added units in milliseconds to the description of the ExactPing variable.

Created Default Input Mapping Contexts to the developer setting. This will let users specify a default set of Input mapping contexts without the trouble of getting the Player Controller in Blueprints or C++

Added Refresh Blueprint editor functions to the BlueprintEditorLibrary. This will allow you to refresh any open Blueprint editors or only ones for a specific Blueprint asset when making changes to their properties from Editor utility widgets.

Created the input device engine subsystem. This subsystem will allow you to set device properties on specific platform users without needing to use any force feedback effects.

Created an Enhanced Input World subsystem that allows you to bind input delegates to Actors without an owning Player Controller.

Fixed a bug that caused assets that were diffed against depot to revert to their depot state.

Exposed Input Device properties as UInputDeviceProperty. This utilizes the existing IInputInterface API to set device specific properties like Light Color, trigger effects, and advanced rumble.

Created a new Enhanced Input Combo Key to avoid Combo Triggers being overridden by mappings with the none key.

Input Mapping Contexts now display Triggers and Modifiers present on the Input Action for that mapping.

Removed an ensure relating to Combo Triggers when the Combo Actions array is empty.

Keep track of the most recent hardware Input Device for each platform user. This lets you find out what input device players are using, and get delegates when that changes.

Added a data validation error to avoid mixing Combo Triggers with other Input Triggers.

Added per-platform input settings that let you specify Hardware Input devices that are available on each platform.

This allows you to detect any custom hardware that you may be using for your game by adding it to a config file. Then when you send controller events you can give a matching FInputDeviceScope so that the engine can detect the device.

Added KISMET_API to several diff related classes so users can create custom diff tools.

Added a templated version of GetComponentByClass.

Improvement:

Force Feedback mapping clarity and consistency improvements.

Crash Fix:

Fixed a crash in the UAbilitySystemBlueprintLibrary::MakeSpecHandle function.

Fixed a crash when calling GetBoundActionValue with a null actor. This can happen if you place the node in an Animation Blueprint graph and compile it

Blocked dedicated servers from trying to create local players, this would crash later on in startup.

Added null check to fix crash in UGameFrameworkComponentManager::CallDelegateForMatchingActors.

Bug Fix:

Made the world partition object transactional when the Modify() function is called on it so that the changes are properly added to the Undo/Redo buffer.

Fixed bug that occurred during character movement corrections which caused rotations to diverge between the client and server.

Fixed a bug where Character movement could desync when using multiple Root Motion Sources with different accumulate modes.

Fixed an issue in Network Prediction Examples causing pawns to result in slow movement during low framerate situations.

Removed erroneous ensure in UGameFrameworkComponentManager::RemoveComponentRequest function, which would trigger if more than one Actor class was mapped to a single component class.

Fixed Level asset from duplicating incorrectly when an Event Dispatcher is in the Level Blueprint.

Fixed a bug where Root Motion Source's "move to dynamic" force would not be updated to match a server correction and degrading movement quality.

Fixed logic in the Gameplay Ability System where a non-Controlled Pawn would be considered remote, even if it was spawned locally on the server (e.g. Vehicles).

Correctly set activation info on predicted instanced abilities that were rejected by the server.

Fixed a bug that would cause GameplayCues to get stuck on remote instances.

Enabled logging for Shipping/Test in KismetSystemLibrary.cpp when USE_LOGGING_IN_SHIPPING is defined to 1.

Added fixes for UInputAction child classes.

Fixed changing Action Value Type affected Blueprints toast from incorrectly showing up when modifying an Input Action that no Blueprints were using.

Fixed unnecessary copies returned from FGameplayDebuggerAddonManager::GetSlotNames.

Fixed a memory stomp when chaining calls to WaitGameplayEvent.

Fixed FGameplayTag::ImportTextItem so that Buffer is updated when we read tokens from it.

Provided a default console key section for the slovak keyboard layout.

Added the bool option bShouldOnlyTriggerLastActionInChord to Enhanced Input. This will track input actions that have Chorded Triggers on them, and allow the filtering of triggered delegates that are fired based on which chorded actions are being triggered this tick.

Fixed DPI scaling issues in FGameplayDebuggerCanvasContext::MeasureString.

Smart Object Behaviors now Support calling world-dependent nodes (i.e. Async Load Asset).

Fixed GameplayDebugger header so it incorporates DPI correctly for displaying time and VLog info at the intended locations.

the camera shake previewer will no longer leak the engine callback when closed.

Fixed invalid camera animation handle, due to a typo between int16 and uint16.

Calling the CreateCombinedHandle() from the FStreamableManager class will no longer trigger an ensure for null handles when SkipNull is passed in.

Gameplay Ability System Attributes now respect Core Redirects. This means you can now rename Attribute Sets and their Attributes in code and have them load properly in assets saved with the old names by adding redirect entries to DefaultEngine.ini.

Fixed an issue where enhanced input bindings for Actor Components would not register at the correct time causing them to be unbound.

Calling the AbilitySystemComponent GetOwnedGameplayTags() function in Blueprint no longer retains the previous call's return values when the same node is executed multiple times.

Deprecated:

Removed previously unused variable FGameplayModifierInfo::Magnitude from the Gameplay Abilities Plugin.

Removed:

Removed miscellaneous unneeded or deprecated matinee-related code.

Mass

New:

Simplified the Mass spawning and entity template APIs by removing unused parameters and functionality.

Refactored UMassEntityTemplateRegistry into a regular struct, FMassEntityTemplateRegistry.

Made the MassDebugger UI tool react to the entity selection via the Mass GameplayDebugger category. The archetype containing the given entity gets selected.

Extracted the core of UMassActorSubsystem into a new FMassActorManager struct to support the logic's reuse in other circumstances (like a dedicated editor subsystem).

Separated the Add and Set operations in FMassCommandBuffer::Flush for a clearer distinction between the two operations.

Added Mass traits tag requirement to help configure some of the MassEntityConfig.

Most of the MassEntity unit tests are now decoupled from UWorld.

Added two editor-time Mass subsystems:

MassEntityEditorSubsystem: Instantiates MassEntityManager and supplies world-independent ticking.

MassActorEditorSubsystem: Wraps FMassActorManager for world-less purposes.

UMassEntityTemplateRegistry::InitializeEntityTemplate now allows empty-composition entity templates. An empty Archetype is created in this case.

Added a multicast delegate to FMassEntityManager that gets triggered upon new Archetype creation.

Added a convenience UMassSimulationSubsystem.IsDuringMassProcessing passing the call over to the hosted FMassEntityManager.

Added FMassProcessingPhaseManager::TriggerPhase which lets users manually trigger a given phase. This change was needed to support processing phases ticking outside of the world tick.

Added a destroy entity debug command.

Improvement:

Updated FMassProcessorDependencySolver::CreateNodes to now support having multiple instances of a single processor class. It can now handle dynamic processor instances with each having a different configuration.

We made the following improvements to the Mass processor dependency solver:

Before solving the dependency, the processor collection is sorted in such a way that it first processes the elements that are blocking the largest number of other nodes.

When storing and comparing information regarding used resources, we also compare sets of matching archetypes to fine-tune resource access. Depending on the parameters, the archetypes can be created especially for the purpose of dependency solving (called "virtual archetypes" in code) or queried from the given EntityManager instance.

These changes result in the shortest "longest sequence," which in turn, significantly improves processor distribution across threads when running Mass in multithreaded mode.

The new approach is utilized by the PhaseManager to rebuild Phases' processing graph whenever a new archetype is created. This resulted in the removal of UMassCompositeProcessor::CopyAndSort and the updating of MassEntitySettings code.

Made the following changes to Mass's support for USubsystems:

Added new struct type FMassSubsystemAccess which stores bitsets indicating which subsystems are to be accessed and in which mode (RO/WR). It also caches system instances (populated either via the CacheSubsystemRequirements call or iteratively as the subsystems get requested).

The new FMassSubsystemAccess is instantiated by FMassExecutionContext. This removes the need for supplying a UWorld instance when fetching subsystems - the value is now fetched from the MassEntityManager being used, and cached.

Made FMassRuntimePipeline::Processors private and updated the call sites to use getters and setters.

Modified the FMassCommandBuffer.DestroyEntities signature to use an array view, which makes it backwards compatible and more flexible.

Turned UMassProcessingPhaseManager into a struct, FMassProcessingPhaseManager.

Simplified the phase manager's initialization by using a single function. The caller is now responsible for passing the phase configuration.

Moved the code responsible for the MassEntitySettings changes from FMassProcessingPhaseManager over to UMassSimulationSubsystem.

Updated the MassDebugger processing graph display to work with single-threaded phases as well.

MassAgentComponent now supports an empty MassEntityConfig, this is useful when the actor is a puppet.

Bug Fix:

Fixed an issue where the State Tree asset filtering for a State Tree trait was incorrect.

Fixed an issue where FMassArchetypeData::BatchMoveEntitiesToAnotherArchetype was modifying the order of entities being added. This was causing the associated payload to get out of sync with the entities being moved around

Fixed an issue where FMassArchetypeData::ExecutionFunctionForChunk was failing shared fragment binding.

Fixed an issue where the MassEntityConfig validation was always showing an error-style notification after a single failed notification, regardless of the following results.

Fixed an issue with UMassCompositeProcessor::Populate where it would side-step the EProcessorExecutionFlags settings of the processors being added.

Fixed a bug in the actor pooling logic when entities were destroyed. The code was calling the wrong method to unregister the entity fragments.

Fixed an issue with FMassCommandBuffer::Flush where it was not maintaining the order of operations of the same type (i.e. the sorting was not stable, now it is).

Fixed a loophole that made it possible to run a MassEntityQuery while its cached data was outdated.

Deprecated:

Left FMassProcessingPhase.bIsDuringMassProcessing for debugging purposes.

Networking

New:

Implemented delta compression for PolymorphicStructNetSerializer in Iris.

Improved Seamless Travel:

The network object info of actors that are seamless traveling is now kept so it can be restored after the full list is reset.

Fixed subobject refcounting ensures triggered during Seamless Travel.

Added support for overriding net cull distances in Iris.

The experimental Iris replication system is now compiled with the engine by default, but will only be used at runtime if it's explicitly enabled.

The Destroy and TearOff subobject functions now work in Iris replication.

Added console variable to detect subobjects that are not registered using the registered subobjects list.

Added the net.SubObjects.DetectDeprecatedReplicatedSubObjects console variable.

When enabled, it will ensure if it detects that ReplicateSubObjects() is implemented in a class that switched over to the new registration method

This console variable is only available in development builds.

Added APIs that allow the authority to tear off or delete a replicated subobject on remote connections.

Call DestroyReplicatedSubObjectOnRemotePeers or TearOffReplicatedSubObjectOnRemotePeers via the Actor or ActorComponent.

Added a list of subobjects replicated to individual channels and the number of channels they are replicated to in the NetDriver's network object info.

Added support for SeamlessTravel and NoSeamlessTravel URL options on game mode to override the default on game mode. If seamless travel is disabled in PIE, it will now fall back to a hard travel instead of failing completely.

Added an assert to tell if the netdriver is missing the required DataStreamChannel definition in its config in Iris.

Added sample code for network packet encryption to Lyra.

Added the possibility to store registered subobjects via a WeakObjectPtr or a regular pointer.

Toggled by setting UE_NET_SUBOBJECTLIST_WEAKPTR.

Default is to use weak pointers.

WeakObjects are useful in a context where some subobjects may get destroyed before getting unregistered which generally occurs on clients and PIE.

Regular pointers are useful when you want to speed up the replication code and you know all your subobjects will be unregistered before getting destroyed. This is generally the case on dedicated servers.

Changed the engine, game, and replay network versioning to use the custom version system.

Refactored dependent actor lists so the child actors are stored by streaming levels in Replication Graph.

Now dependent actors are not replicated if the connection does not have the streaming level loaded.

Added FLevelBasedActorList struct to RepGraph plugin. Holds actors based on their level (permanent or streaming)

Added support for overriding net cull distances without modifying the Actor's NetCullDistanceSquared property in Iris.

ReplicationSystemTest unit tests now support NetTrace.

Added a new command line option to run a subset of tests by using -TestFilter [filter] to only run tests where the name contains the provided string.

Replaced the DormantReplicatorMap with the private DormantReplicatorSet in NetConnection.

The new struct holds dormant object replicators grouped by their owning actor.

Current public usage of the dormant map has been replaced with equivalent functions in UNetConnection.

Updated the Network Prediction plugin readme with architecture and operational flow, technical details, and known issues.

Added ability for URLs launched via the Launch URL Blueprint node or the new function FPlatformProcess::LaunchURLFiltered to be filtered by an allowlist that's custom-built by code or defined in config files. The allowlist for the Blueprint node uses the [SystemLibrary.LaunchURLFilter] section in the Engine config file.

Added send destruction info for dormant actors from cells that are no longer observed by the network client.

TimeToLife for cell to send destruction is configurable and overridable by the game per GridSpatialization2DNode.

Exposed ReplicatedDormantDestructionInfosPerFrame CVar to have control over optimization levers.

Added Profiler markers to measure impact of enabling dormant actor cleanup.

Network Insights now supports capture of demo recordings.

[Iris] Implemented support to allow descriptors built for structs derived from FastArraySerializer. Contains additional properties to be handled by using an explicit ReplicationFragment.

Added new parameter OldArraySize to FastArraySerializer::FPostReplicatedReceiveParameters containing the size of the fastarray prior to the last receive operation.

[Iris] Implemented delta compressed variants of WriteSparseBitArrayDelta and ReadSparseBitArrayDelta.

[Iris] Added new trait UseSerializerIsEqual to NetSerializer to indicate whether it should use the serializer's IsEqual method instead of using property comparison. An example of where this is used is GameplayAbilityRepAnimMontageNetSerializer.

Improvement:

Improved support for debugging controlled reconciliation and rollbacks in the Network Prediction plugin via command console variables.

Improved replicated subobjects:

Refactored subobject refcounting so its lifetime is independent of the NetworkObjectInfo.

Fixed incorrect refcounts when ActorChannels are still not cleaned up while the NetworkObjectInfo of an actor was destroyed.

Crash Fix:

Fixed a crash in ReplicationStateDescriptorBuilder in Iris when building descriptor structs with CustomNetSerializer if compiling with clang.

Bug Fix:

Fixed ensures in dormant refcount code that were caused when an invalid replicator in a channel's ReplicationMap was removed.

This was caused by a safeguard that tried to remove any dormant replicator of the pointer reused from a now invalid subobject.

This safeguard was removed for two reasons:

Dormant replicators are always validated before being returned, so there is no need to manually discard them.

A dormant replicator cannot be stored in both the ReplicationMap and the connection's dormant list.

Fixed a bug in the Network Prediction plugin where a temporary client hitch could result in significant and permanent lag in server-side input consumption.

Fixed a bug in Iris where class default objects and archetypes could be destroyed on the client when the server stopped replicating them.

Fixed a bug where Network Prediction simulated actors could be invisible on other clients when sim proxy interpolation mode was used.

Fixed a case where replays could discard external data saved in the first few frames of recording.

Fixed actor tear off behavior to respect the actor channel close reason, even if the final property bunch is dropped.

Added ensures in NetGuidCache::Supports and ObjectRefereceCache to prevent replication of references to objects pointers that belong to another PIE instance. Added guards in GameplayDebuggerLocalController to not forward calls to RPCs via delegates from other PIE instances.

Fixed a potential freed memory access in partial bunch handling.

Iris - Fixed issue where custom property overrides was not properly initialized for iris if set before BeginPlay/BeginReplication

Fixed potential buffer overflow in DTLS packet handler.

Fixed ensures in dormant refcount code caused when an invalid replicator in a channel's ReplicationMap gets removed. This was caused by a safeguard where the code tried to remove any dormant replicator of the pointer reused from a now invalid sub object.

Fixed the network driver IsInTick call for derived classes.

Fixed several issues with restoring the state of placed actors during replay scrubs.

Fixed an issue with torn off actors in replays where not all modified properties would be recorded.

Fixed socket GetLocalHostAddrViaConnect returning the wrong address type on some platforms.

Fixed push model fast array tracking to not skip updates if there are unacknowledged property retirements.

Fixed several issues with the seamless travel networking code when pending kill is disabled.

Fixed race condition where clients would sometimes be sent new actors before seamless travel finished, which broke their replication.

Fixed return of temporary string address in network property registration.

Fixed bIsQuantizedState flag not being property set in a bunch of NetSerializers in Iris.

Fixed issue where AActor::SetReplicates(false) would not stop replication for Iris.

Fixed issue with AActor::EndReplication not being forwarded if bReplicates is set to false prior to call even if the object was replicating.

Fixed AActor::GetNetMode when called early in PIE/network startup to ask the world if there is no net driver yet, this allows better detection of dedicated servers at the actor level.

Changed several debug commands in the save game replay streamer to be asynchronous file operations to avoid large game thread stalls.

Replaced several replication graph strong references with weak pointers to prevent garbage collection issues.

Changed the Basic Replication Graph's GridSpatialization2D node to use UE_OLD_WORLD_MAX.

[Iris] Fixed registering RPC-functions for subobjects with COND_Never so that they can be called even if the subobject does not replicate.

[Iris] FastArraySerializer PostReplicatedReceive is now properly called for all relevant paths through FastArrayDeltaSerialize on the receiving side.

[Iris] Fixed a few bugs related to tearing off SubObjects:

Tearing off objects with no replicated state data.

Subobject owner was not marked dirty when we dropped creation info for the subobject which then would not replicate until the next time the owner was marked dirty.

Client could get a bitstream error if we got a replicated destroy for a yet to be created subobject.

NetTrace not working properly with ReplicationSystemTest.

Fixed an issue where handles were sent instead of names for dynamic array properties if the name serialize property type option was enabled.

Fixed an issue with GameplayEffectContext replicating a reference to a dynamic object that would never be replicated.

This prevented GameplayEffect from calling Owner->HandleDeferredGameplayCues(this) as bHasMoreUnmappedReferences would always be true.

Fixed an issue when an attached actor is created, the absolute scaling was sent to the client instead of the relative scale to its parent.

This caused issues because the scale would then get treated as the relative scale, causing the scaling to be applied twice.

Deprecated:

Deprecated the DormantReplicatorMap.

Removed:

Removed hardcoded Iris prioritizer for PlayerState as it is configurable in .ini files.

Removed deprecated Replication Graph code.

Level Design and Art Tools Geometry Core

New:

Added a FindAnyInRadius query, which can stop searching as soon as any point within the search distance has been found.

The C++ Mesh AABB Tree class now has an IsWithinDistanceSquared method, which can early-out faster than the standard FindNearestTriangle.

The C++ TConstrainedDelaunay2 Add function now has an AddWithIntersectionResolution version, which attempts to resolve self-intersections in the input before triangulating.

Added GetVerticesBounds function, which computes the bounds of subsets of a mesh's vertices, to the TMeshQueries class.

Added GetTrianglesBounds function, which computes the bounds of subsets of a mesh's triangles, to the TMeshQueries class.

RecomputeOverlayTriNormals function has been added to the FMeshNormals class, which recomputes normals on a subset of the Normals Attribute Overlay.

RecomputeOverlayElementNormals has been added to the FMeshNormals class, which recompute normals on a subset of the Normals Attribute Overlay.

Added a FMeshTriOrderedEdgeID type, which represents an integer edge ID of a mesh as a (triangle, triangle-edge-index) pair, where the triangle edge index is the 0/1/2 index into the edges of the triangle. This represents a mesh edge in a way that is stable across mesh edits which may affect edge IDs.

ConvertLoopToTriOrderedEdgeLoop utility function has been added.

Added a ConvertTriOrderedEdgeLoopToLoop utility function.

Added a wrapped version of the fTetWild third party library to the GeometryProcessing Plugin; providing users a way to reliably construct a reasonably good-quality tetrahedral mesh from any triangle mesh input.

GrowToConnectedVertices function has been added to the FMeshConnectedComponents class, which behave similar to the existing triangle variant.

GrowToConnectedEdges has been added to the FMeshConnectedComponents class, which behave similar to the existing triangle variant.

Added a Tetrahedron3 type in TriangleTypes.h, and a new TetUtil.h header with common tet operations.

Replaced the deprecated template VectorType versions of the GeometryCore Exact Predicate functions with non-templated inline functions that handle the standard vector types-since we cannot deprecate the fully generic template version. If you need to call these functions with a custom vector type, please use the deprecated versions as reference to convert your call to any of the very similar non-deprecated function calls.

Improvement:

The mesh Fast Winding code has been optimized to better re-use cached values and avoid some unneeded square root function calls.

FSparseDynamicPointOctree has been significantly optimized and now supports parallel construction from dense point sets, via ParallelInsertDensePointSet.

The C++ TPointHashGrid class has been optimized to reduce memory allocations during queries and to early-out faster in common usage patterns by testing the closest grid cell first.

Updated the FindPointsInBall method to return the number of points found, not the number of points in the append array on return.

Updated the GeometryCore sparse dynamic octree class to now use range iteration to find relevant root cells for point containment and range queries, when there are enough root cells that this is likely to be faster than testing all root cells.

Bug Fix:

FDynamicMesh3::EnableMatchingAttributes can now support more granular control over whether existing attributes are cleared or discarded. Various higher-level code that uses this function now have improved behavior around meshes with mismatched attributes.

Fixed the UDynamicMeshComponent::SetDynamicMesh function to now change the Outer of the incoming mesh to be the UDynamicMeshComponent. This is necessary to avoid serialization issues easily created in Blueprints which would result in the UDynamicMesh not being saved with the Component after it has been Set.

Fixed the BrushToDynamicMesh conversion class to now compact the final FDynamicMesh3 after welding vertices.

Deprecated:

The GeometryCore Exact Predicate functions are now const-correct, and we have deprecated the template VectorType versions of these functions.

Geometry Script

New:

Added Sample Texture Render Target 2D At UV Positions node, which returns a list of colors obtained by sampling a texture render target at a list of UV positions. This node is the render target analog of the existing Sample Texture 2D At UV Positions Geometry Script node.

Updated the Geometry Scripting plugin modules that can be used at Runtime, to now load PreDefault to ensure they are loaded before any user plugins that might reference Geometry Scripting.

Added a GetMeshHasTangents function.

Added a DiscardTangents function.

A GetMeshPerVertexTangents function has been added.

Added a SetMeshPerVertexTangents function.

A SetMeshPerVertexNormals function has been added.

Added a UpdateVertexNormal have been added

A new function TranslatePivotToLocation has been added to simplify setting the "Pivot Point" / Origin of a UDynamicMesh

A new function SetAllMeshVertexPositions has been added to update all the vertex positions of a UDynamicMesh from a list of computed positions

A set of utility functions for creating and manipulating Transforms has been added, including MakeTransformFromZAxis, MakeTransformFromAxes, GetTransformAxisVector, GetTransformAxisRay, and GetTransformAxisPlane

GetInterpolatedTrianglePosition function has been added for linearly interpolating mesh attributes across triangle faces based on barycentric coordinates.

GetInterpolatedTriangleUV function has been added for linearly interpolating mesh attributes across triangle faces based on barycentric coordinates.

GetInterpolatedTriangleNormal function has been added for linearly interpolating mesh attributes across triangle faces based on barycentric coordinates.

GetInterpolatedTriangleNormalTangents function has been added for linearly interpolating mesh attributes across triangle faces based on barycentric coordinates.

GetInterpolatedTriangleVertexColor function has been added for linearly interpolating mesh attributes across triangle faces based on barycentric coordinates.

Added a GetHasTriangleNormals function to provide more granular access to mesh normals and vertex colors.

GetTriangleNormals function has been added to provide more granular access to mesh normals and vertex colors.

Added a GetTriangleNormalTangents function to provide more granular access to mesh normals and vertex colors.

GetHasVertexColors function has been added to provide more granular access to mesh normals and vertex colors.

GetTriangleVertexColors function has been added to provide more granular access to mesh normals and vertex colors.

Added asset creation and binding functionality for skeletal meshes.

Bug Fix:

Added a Delete Isolated Triangles input pin to the Fill Options struct of the Fill All Mesh Holes node.

Corrected the incorrect handling of textures with source format BGRE8. This correction affected the Sample Texture 2D At UV Positions geometry script node.

Modeling Tools

New:

Moved UV Editor 2D viewport behavior targets to EditorInteractiveToolsFramework for reuse in other editors.

Merged the codebases of shared tool operations between the UV Editor and Modeling Mode for consistency and improved development.

Improved the documentation of options in the SubDiv tool.

Updated the PolyCut tool to avoid trying to fix holes by default and provide a warning.

Made various settings accessible via the cog icon in Modeling Mode Quick Settings.

The TriSel tool now has a By Material (All) selection option, to select triangles by matching material ID across an entire mesh without considering connectivity. The previous By Material option is now named By Material (Connected).

Fixed readability issue in mesh statistics display.

Created a new MeshTopologySelector base class.

Added a new BoundarySelector class which inherits from the MeshTopologySelector base class. The new Boundary classes use FMeshBoundary loops to define selectable loops rather than FGroupTopology.

Added new helper methods to determine the count of Actor Components that match Target Requirements and an additional test predicate for specialized scenarios.

A couple of helper methods were added to test for Volume components and component classes that support UVs. This is to support and fix the issues surrounding the UV modeling tools that shouldn't be viable for Volume type targets.

Fixed incorrect handling of texture source format BGRE8 in UE::AssetUtils::ReadTexture function.

Improvement:

Fixed a minor readability issue of the UV field in the Mesh Statistics section of the Simplify tool.

Improved the display of options in the SubDiv tool, including updates to tooltips.

UpdatedUV Projection Tool to allow the user to change the Initialization mode and have it affect the current instance of the tool, as long as they do it before modifying the transform.

The MshMrg tool has been renamed to Merge.

The MshDup tool has been renamed Dupe.

The Merge tool has been renamed to Union.

Updated existing GroupTopologySelector to inherit from the MeshTopologySelector base class.

Changed the Hole Fill tool to use BoundarySelectionMechanic instead of GroupTopologySelector.

Updated FMeshBoundaryLoops to fail untangling a loop with bowties but still continue processing other loops.

The Group Paint tool can now draw numeric IDs of visible PolyGroups, as well as draw the ID of the PolyGroup under the cursor.

The Inspector Tool can now draw numeric triangle, edge, vertex, and PolyGroup IDs, and supports picking from the set of available PolyGroups.

Expanded the set of override render materials.

Added a PolyGroup Layer picker.

Updated materials used by the Modeling Mode tools and the UV Editor to make use of the new Switch material node. The update removes any custom nodes currently in use, and generally fixes issues related to material compilation under Restricted mode.

Added undo and redo support for actions while in corner mode of the Cube Grid tool.

Updated the Cube Grid tool to refresh the Modeling panel when initializing from Actor.

Bug Fix:

Fixed the toggle gizmo action in some tools by unbinding it from a default hotkey to prevent users from accidentally pressing it and thinking the tools are broken. Users can still set their own hotkey if their workflow benefits from it.

Fixed a crash in the Merge tool when a mesh uses a material ID that is not in its material list.

Updated the Subdivide tool by preventing it from running with level 0 specified. For example, if the input mesh is very high resolution and the subd level is automatically capped.

Fixed undo and redo when Ctrl + Middle-Clicking in the Cube Grid tool.

Fixed old selection being visible when clicking away from everything while using the Cube Grid tool.

Fixed a bug where the Trim tool starts a potentially expensive boolean calculation when only the opacity color alpha changes.

Updated the MshToVol tool to always attempt to simplify volumes it creates, if those volumes would have more than 200 faces. This helps avoid the creation of volumes that are too large for the BSP processing code to handle, which could otherwise cause the editor to hang.

Updated the Subdivide tool to not ensure the subdivision level is zero, since it might have been restored to zero from the previous tool use.

Fixed the Pivot tool not working on things with static and stationary mobility.

Updated the MatEd tool to prevent the creation of meshes with more materials than material slots.

Fixed a bug where the Smooth Borders action in TriSel tool could not be undone.

Fixed Triangle Edit tool's Flip Edge operation selecting wrong edges afterward.

Resolved Static Mesh's sockets from getting lost when merging Static Meshes by adding a Merge Mesh Sockets option to the Merge tool's settings.

Updated packing UVs to avoid relying on the UV area to scale triangles in the UV map, instead, it uses the edges length (perimeter).

Fixed invalid array access in FDynamicMeshUVEditor::SetTriangleUVsFromConformal.

UV Editor

New:

Adjusted the behavior of the Transform quick rotation buttons to rotate clockwise for positive rotation values and counterclockwise for negative values.

Changed axis colors in UV Editor to align with the Level Editor.

Bug Fix:

Cleaned up tool tip text in the Transform tool to be more consistent between different buttons.

Added support to correctly handle the initiation and termination of Play In Editor (PIE) mode in the UV Editor. This properly restarts the selection tool upon finishing PIE and adds new warning messages indicating that PIE is currently running.

Fixed issue where selections for unwrapped meshes were being used for focusing the viewport to the selection in the 3d viewport.

Fixed UV Editor to avoid loading content browser items when trying to figure out whether UV editor can be started on them.

World Building

New:

Added wp.Runtime.UpdateStreamingOptim.Enable to enable it. This is off by default.

Added advanced options to control how aggressive the optimization is when using wp.Runtime.UpdateStreamingOptim.LocationQuantization and wp.Runtime.UpdateStreamingOptim.RotationQuantization.

Added support for masked materials with Merge Actors flatten material.

Added showing child actors of child Level Instances even when editing a Level Instance.

Added World Outliner filter "Only in current Data Layers" similar to "Only in Current Level".

Exposed DataLayerLoadingPolicy for licensees to be able to override the default OR behavior of Editor Is Loaded flag.

Renamed "Build Minimap" to "Build World Partition Editor Minimap" to remove confusion with in-game or HUD minimap.

Removed support on single actor packaging mode for One File Per Actor and Folder Objects.

Added events for HLOD registration/unregistration in the world for World Partition - HLODs

Added the ability to preview the pivot location when changing it from the Details panel when using the Level Instance Pivot Picker.

Pivot Actor Picker is no longer restricted to Level Instance actors.

Added editing of the HLOD Layer property for Actors inside Level Instances in World Partition

In editor World Partition builds that launch external commandlets are now cancellable.

Added scope transactions around WorldPartition EnableStreaming and CanBeUsedByLevelInstance properties so they can be captured as transactions.

In WorldPartition: IStreamingSourceProvider can return more than one StreamingSource.

Added TargetBehavior so a StreamingSource can be applied on its Targets or on all Targets excluding its targets.

Added Destructible HLOD support using HLOD modifiers for World Partition - HLODs

Added BugIt menu (prints BugItGo command in console and to clipboard) to WorldPartition Editor

Added the -DiffDirtyActorDescs option to World Partition - ResaveActorsBuilder commandlet to compare the old & new Actor descriptors.

Added the "-ActorClassesFromFile=" option to the World Partition - ResaveActorsBuilder commandlet to read a list of classes to filter on from a file (one class per line).

Added support for runtime HLOD modification to World Partition - HLODs.

An HLOD modifier class can be assigned to an HLOD Layer in World Partition - HLODs.

HLOD Modifier classes can inject new components during an HLOD build in World Partition - HLODs.

Improvement:

Optimized World Partition update streaming state by avoiding computing streaming source spherical sector intersection information when the source is a sphere and avoiding validating cell coordinate when already done. Also optimized FSquare2DGridHelper::ForEachIntersectingCells.

Added "Browse to asset" on Data Layer items in Data Layer Outliner.

WorldPartitionStreamingPolicy::UpdateStreamingState can now detect if there is nothing relevant to World Partition streaming changed and early-out.

Removed Data Layer AccentBlue color for Data Layers used by actor selection so that current editing Data Layers always keep their green color.

Double clicking on Data Layers in the Data Layer outliner now adds or removes the Data Layer to/from the editing context.

Bug Fix:

Fixed condition for bRenderOpacityMask to be correctly based on the OpacityMask property instead of Opacity property.

Fixed loading editor only material in FWorldPartitionRuntimeSpatialHashGridPreviewer when cooking.

Fixed when showing Actors and Level Instance content in the Data Layer outliner, not interacting with level instance part of a Data Layer.

Removed "Rename Data Layer" menu entry in Data Layer Outliner for maps using Data Layer Assets.

UWorld::AddToWorld now only calls FAssetCompilingManager::Get().ProcessAsyncTasks() on a MakingVisible streaming level if its time limit hasn't been reached.

Fixed crash when exiting PIE where World Level Instance subsystem is accessed by uninitializing instanced World Partition after world subsystems are deinitialized.

Foliage Actor type was not available in the Foliage palette even for non-partitioned worlds.

Fixed bad World Partition cell bounds when containing level instance actors.

Fixed crash in PIE/Cook in World Partition maps using old/unsupported Foliage Type Actor.

Fixed crash when loading Actors with child actor components when AActor::RegisterAllComponents/RerunConstructionScripts would recreate child actors and loading code would process old/destroyed child actors.

Fixed an issue with UWorldPartitionRuntimeVirtualTextureBuilder when rebuilding scene primitives after shader compilation completes at start of RVT builder commandlet.

Fixed Data Layers Loaded In Editor and Not Loaded in Editor flags not properly read from the EditorPerUserSettings config file.

Fixed check when using "Make Current Data Layer" after deleting a Data Layer in the outliner.

Fixed crash when stopping PIE and loading instanced partitioned worlds.

Fixed unloading of an instanced partitioned level with streaming enabled.

Fixed Foliage Replace With option where target foliage type is already used.

Fixed crash when opening Data Layer menu after closing/reopening the Data Layer Outliner.

Fixed crash when running with -server in map containing Actor Folders and fixup of a folder is necessary.

Fixed FWorldPartitionStreamingSource default ctor.

Fixed HLOD runtime Data Layers that were not properly assigned on HLOD actors generated for HLODLayers above first level.

When looking for the cell that contains a subobject in the World Partition level streaming policy, use the runtime hash in the World Partition as the outer instead of the World Partition itself.

Added a check to make sure that HLOD runtime grids that contain net relevant actors are flagged as not bClientOnlyVisible. Multiple HLOD layers can point to the same runtime grid. The runtime grid must be available on the server if any of the layers requires it.

The PackedLevelActor Blueprint now recompiles the skeleton class after clearing SimpleConstructionScript to avoid component name clashes when adding the new components.

Provides the full set of command line arguments as provided for the editor launch when invoking external commandlets (for HLODs/Minimap) with World Partition.

Fixed issue with HLODs being built before construction scripts were fully executed on their source Actors.

Reload current map when Build Minimap or Build HLODs commandlet fails

Replicate World Partition - HLOD Actors if any of their components needs to be replicated.

World Partition - HLOD Actors don't need to be loaded on the server if they have nothing to replicate.

Ensure Actors references are loaded when building HLODs. Specifically, parent actors could be missing, causing the HLOD source actors transform to be wrong.

Deprecated:

Deprecate TargetGrid/TargetHLODLayer in favor of TargetGrids/TargetHLODLayers.

Localization

New:

Implemented async loading of localization data, and extended dynamic loading to handle explicitly loaded plugins.

This change takes the existing async loading that was added for game localization data and expands it to cover all localization data.

Async localization tasks are chained together as dependencies to preserve the existing order of operations, and can be waited on at any point (for example, after a loading screen) by calling FTextLocalizationManager::WaitForAsyncTasks.

Introduced the keys debug culture.

When users switch to this culture, all the localization text that is displayed will instead display the localization key of the UI test.

This allows users to easily see the key of the localization text that is localized incorrectly or not localized at all, allowing them to track down the issue faster.

Users can change the culture using the command line argument -culture=keys.

They can also do the same in the in-game console.

If the key is too long, users can use a console variable Slate.LogPaintedText to log all keys painted on screen to match the full key in the output log.

Updated Smartling to download translations for files that are both in progress and published. This allows partial translations to still be exported to translated .po files.

Updated Smartling localization to use Smartling namespaces to reduce duplicated strings and leverage the string sharing feature for Smartling.

Improvement:

UX improvements for the in-editor culture picker.

Bug Fix:

Fixed the localization gather failing to gather text from external actor packages.

Fixed a localization warning for tvOS.

Online

New:

Separated Online Services Session information into constant FSessionInfo and mutable FSessionSettings.

Added IsPresenceSession method to Sessions interface.

Refactored UpdateSession method into UpdateSessionSettings and UpdateSessionMember.

Added auxiliary methods and operators to simplify update data operations.

Added ability for types of social users to override which interactions are available for a given user via overriding GetAllAvailableInteractions and HasAnyInteractionsAvailable.

Added OnNetworkConnectionStatusChanged event to FCoreDelegates.

Added GetNetworkConnectionStatus function to FGenericPlatformMisc.

Fixed social toolkit broadcast delegate unbinding.

Improvement:

Refactored USocialUser OnNewSocialUserInitialized to not use a global map.

Bug Fix:

Fixed order of arguments passed to UE_LOG_ONLINE to match the format types.

FWebSocketModule::Get now loads the WebSockets module if it is not loaded.

Added ensure and warning log when a local social user is not properly initialized.

Fixed bug to let initialization of Cloudkit finish before trying to read anything from it.

Fixed a patch check from running and ignoring the result when configured to skip.

Hotfix System

New:

Added support for hot-fixing application variants of dedicated server files.

HTTP

New:

Added the FHttpManagerRequestCompletedDelegate delegate to the HTTP manager that is fired when an HTTP request completes. This will allow for games to add analytics around HTTP request completion.

Added HttpFwd.h for HTTP and HTTP Retry System forward declares.

Bug Fix:

Fixed issues with URL parsing.

Added missing bounds check and adjusted existing bounds checks to avoid potentially overflowing an int32

Fixed LastReportedBytesSent/Read not being reset on a new request.

Online Subsystem

New:

Added GetVoiceChatRoomName method to sessions interface with EOS and EOSPlus implementations.

Updated AppleHTTP implementation to use NSURLSession by default instead of deprecated NSURLConnection.

Implemented AddRecentPlayers in friends GDK interface when using MPA.

Updated Facebook SDK on Android to 15.0.1 in OnlineSubsystemfacebook.

Added IUniqueNetIdEOS class to get Epic Account Id and Product User Id from OnlineSubsystemEOS net ids.

Upgraded EOS SDK to EOS-SDK-24099393-v1.15.5

Use console variable to "choose default gamertag" component for GDK username displaying, so developers can choose different gamertag modes to try out at runtime.

Engine plugins have migrated to setting specific API versions in EOS options structs, rather than API latest. Please see the OSS EOS "Upgrading the EOS SDK" documentation for more details.

EOS Engine plugins have migrated away from static asserts to catch updates to EOS SDK options structs, towards a deprecation like warning mechanism, which can be silenced by setting "[EOSShared] bEnableApiVersionWarnings=false" in the Engine ini hierarchy.

Online-related configuration has moved from Default to Base .ini config files to avoid overriding project settings.

Added OnlineExternalUINull OSS interface to allow emulating console/mobile platforms on PC.

Moved existing testing config variables to OnlineSubsystemNull.cpp and exposed them as proper console variables so they can be changed at runtime.

Added SupportExternalUI, RequireShowLoginUI, and ForceShowLoginUIUserChange options to emulate a platform user change during login.

Fixed some deprecations and issues found in OnlineSubsystemFacebook RESTful implementation.

Added MPA support for OnlineSessionInterface on GDK.

Can be switched on when a game does not rely on hopper matchmaking or playfab netdriver.

EOS AuthScopeFlags are now configurable.

Output console exe result in console window for Online Services.

Extended the OnlineGameActivity interface to allow for querying player's game activities.

Improvement:

Improved logging for USocialParty UpdatePartyConfig Completion.

Refactored OnlineSubsystemGooglePlay to update Google Billing Library to v5.0.0 and fixed several issues.

Updated FacebookSDK for iOS in OnlineSubsystemFacebook to v15.0.0 and removed unsupported functionality.

Refactored and cleaned up in app purchases implementation in OnlineSubsystemIOS.

Crash Fix:

Fixed crash in OnlineSubsystemGooglePlay for Android in 32 bit architectures when logging purchases information.

Fixed a crash when rematch after canceling matchmaking in joining game session state when using MPSD of OnlineSessionInterface by making it not able to cancel in joining session state.

Bug Fix:

Fixed OSS EOS CopyLobbyAttributes not updating existing keys.

Fixed an issue on GDK that some player names are truncated without reaching the length limit.

Steam GetLinkedAccountAuthToken now takes a TokenType parameter so you can ask for a specific token type.

For Steam, App and Session are valid options.

Passing an empty type defaults to App, but what is the default is also configurable.

In 5.0 GetLinkedAccountAuthToken returned APP tokens, and in 5.1 we made the breaking change to return SESSION tokens instead. This change has now been reverted back to APP tokens by default.

FUniqueNetIdRepl::ExportTextItem now wraps some net id values in quotes, to ensure they will import correctly with ImportTextItem. Net id types that import correctly without quotes will continue to export without quotes.

Fixed bHasVoiceEnabled being loaded from OSSPS5 config, not OSS config.

The -EpicSandboxId argument passed by EGS is now handled correctly, and selects the config artifact with the matching EpicApp and SandboxId pair.

Fixed iOS GameCenter login flow on OnlineSubsystemIOS that was assuming native login UI can be shown more than once and not triggering OnLoginComplete and OnLoginStatusChanged in cases the user rejected the login or log out/in from the GameCenter device Settings after moving to background

Resolved OSS EOS FUniqueNetIdEOS hashes not being stable when the net id mutated (for example, adding or removing PUID or EASID on account link or unlink), leading to broken sets/maps using the net id as a key.

OSS EOS and EOS Plus: Resolved OSS EOS and OSS EOS Plus net ids being incompatible, leading to crashes when playing together. OSSEOS will drop the platform id from OSSEOSPlus net ids, but this is recoverable with QueryExternalAccountIdMapping.

OSS: CreateUniquePlayerIdWrapper prefers to load a net id with the mapped OSS, if one is configured for the input net id type.

Fixed possible loss of precision in OnlineSubsystemGooglePlay when passing currency prices through JNI from GooglePlay Billing Library data.

Ensure recreation of XblContextHandle after reconnecting to network to avoid MPSD creating/updating issues on GDK.

Fixed online beacon authentication hang which occurs when multiple beacon connections from the same player are handshaking at the same time.

Fixed an issue causing non-deterministic OSSv2 SchemaCompatibilityIds.

Fixed an issue to set local name in the EOS lobby on create and join.

Refactored FOnlineAccountIdRegistryNull to be stable across service restarts.

Deprecated:

Deprecated of the OnlineSubsystemOculus plugin.

Meta is now responsible for building and releasing the OSS Oculus plugin via their OculusPlatform which is available on the UE Marketplace.

Removed:

Owning User Id attribute removed from EOS Sessions and Lobbies logic to prevent misuse.

Owning User Id retrieval in EOS Lobbies refactored to use the related EOS SDK logic.

The removed functionality in Sessions will be re-added when this same information is made available via EOS SDK.

Pixel Streaming

New:

Multiple pixel streaming streamers can now connect to the same signaling server. This requires streamers to have unique IDs and players must now subscribe to an active streamer. Most of this is handled with changes in the Pixel Streaming Infrastructure git. Old behavior with single streamers connected shouldn't be affected and should still behave in the same way.

Added a new, experimental, unified framework for video encoding and decoding in Unreal Engine - AVCodecs.

Current support is for hardware accelerated H.264/H.265 on NVIDIA and AMD cards.

Further documentation and API stability will come in subsequent versions of Unreal Engine.

In 5.2 Pixel Streaming now uses AVCodecs for its hardware accelerated video encoding.

Added experimental VR Pixel Streaming support.

This requires the latest frontend infrastructure from the PixelStreamingInfrastructure repository found on Epic Games Github page.

This requires you to disable the OpenXR plugin if your VR headset is connected to the same machine as your Pixel Streaming application.

Added new console variables:

PixelStreaming.WebRTC.NegotiateCodecs: enables Pixel Streaming and whether Pixel Streaming should send all its codecs during handshake so peers can negotiate or just send a single selected codec.

PixelStreaming.ExperimentalAudioInput: enables experimental mixing of arbitrary audio inputs which can be fed in using the Pixel Streaming C++ API.

PixelStreaming.CaptureUseFence: enables whether the texture copy we do during image capture should use a fence or not (non-fenced is faster but unsafer).

PixelStreaming.DecoupleFramerate: enables whether we should only stream as fast as we render or at some fixed interval (potentially sending duplicate frames or skipping frames). Coupled means only stream what we render.

Added the ability to use multiple different video codecs at once.

Added debug information to onscreen stats about which codec is selected for encoding.

Added module startup logic to PSPlayer to always negotiate codecs. This is a temporary fix until we move to NegotiateCodecs being the new default globally.

Input handling moved out of Pixel Streaming into the new PixelStreamingInput module.

Added instrumentation to Pixel Streaming so it shows up in Unreal Insights.

Added the new IPixelStreamingSignallingConnectionInterface. This allows users to implement their own FPixelStreamingSignallingConnection that can use other protocols e.g. NATS.

Added the ability to stream render targets using Pixel Streaming blueprints.

Added support for DX11 with AMF.

Added support for get_ps_servers.bat and get_ps_servers.sh to pull down a release from Github.

Downloaded Pixel Streaming infrastructure now creates a DOWNLOAD_VERSION file that tracks the downloaded version and if the latest release version is mismatched the frontend is redownloaded.

Added binary websockets message support to Pixel Streaming streamer.

Added support to set custom "command" handlers for datachannel messages that are of type "Command". This is useful if your project needs to run an Unreal Engine command that is not supported out of the box by Pixel Streaming. Or alternatively, if you wish to override existing commands and change what they do.

The IPixelStreamingStreamer interface now supports passing arbitrary configuration strings to the streaming client upon establishing a connection. This is now used to inform the Frontend to default to Hovering mouse mode if streaming from the editor.

A TextboxEntry command was added to allow support for sending entire strings as opposed to character by character updates.

Add support for PixelStreaming VCam to resize UE viewport to match remote device resolution. This is useful when using the LiveLink iOS app with Pixel Streaming VCam as the streamed resolution will now match the iOS device.

Extended JSON handling in Pixel Streaming to handle nested JSON objects.

Crash Fix:

Editor streaming crash where window hashing function wasn't unique. Hash function has been made unique by incorporating the window title.

Pixel Streaming delegates causing a crash when using Linux dedicated server target.

Fixed Pixel Streaming AudioInputMixer crashing on shutdown when using -PixelStreamingExperimentalAudioInput.

Fixed deadlock issue that would cause Pixel Streaming streams to freeze and crash intermittently.

Bug Fix:

Shell version of get_ps_servers script was not copying files/folders beginning with ".".

Fixed stat PixelStreaming not working when streaming in editor.

Cursor now shows up by default when editor streaming and browser no longer needs url parameters /?hoveringMouse=true.

Memory leak in editor streaming that would occur when popups were open.

The built-in Signaling Server for Pixel Streaming directly from the editor now defaults to port 8080 when used on Linux. This now allows use of Editor Streaming on Linux without having to launch the editor with elevated permissions.

Fixed an issue where the streamer did not provide a port in its PixelStreamingURL.

Fixed a deadlock that could happen when using dx11 on AWS instances.

Fixed a crash when using -onethread and VPX encoding.

Fixed a Pixel Streamed application being unable to scale mouse input due to target window being nullptr at load.

Fixed Editor streaming where assumed editor window was always located at (0,0). This resulted in incorrect input when a window was placed to the left of the main editor window or when the editor wasn't maximized.

Removed:

Version M84 of WebRTC.

Websockets

Bug Fix:

Fixed WebSockets to follow Epic's Coding Standard for Inclusive Word Choice.

Platform

New:

Deprecate half-implemented and unused FPlatformMisc::GetCacheLineSize to get runtime cache line size We currently have no use case for a runtime-queried cache line size and the function only existed on a subset of our supported platforms

Added IMediaCaptureSupport for macOS and iOS. This makes it possible to capture audio and video through the media framework.

Added a simple replay-based PGO Gauntlet task.

Added a TargetRule to remove FixedTimeStep/Deterministic mode from a project.

You can now run AutoSDK installation with Turnkey from any copy provider.

Added a new callback to staging that allows for finalization of staged files.

Added a default implementation of GetCookPlatform, which makes it possible for BuildCookRun to run without needing any platform-specific automation DLLs. Previously, cook and staging could run, but running and packaging till needed the platform automation DLLs.

Bug Fix:

CookOnTheFly now correctly applies PluginExtensions.

Plugins are now filtered using FPluginReference instead of FPlugin to make PluginExtensions discoverable.

Previously, PluginExtension .uplugin files were not added to the file list for NetworkFileServer due to the Plugin Manager searching only for the basedir of each plugin. Now, when the Plugin Manager tries to find plugins, it now caches the basedir of each child plugin belonging to an FPlugin, then merges the children into it. After that, NetworkFileServer can then find these directories, exclude them if they are not for the targeted platform, and make them available to the client. MSP 2/15/2023

Previously, installed builds generated without Sony platform support would fail to detect SDKs for other platforms. Now, non-Sony installed builds exclude incorrectly included Sony.Automation.json files.

Fixed PerPlatform property customization to list all platforms in editor properties, not just the ones that TargetPlatforms created.

Removed the PerObjectConfig flag from TextureLODSettings, because it was causing the class defaults to not be read in from BaseDeviceProfiles.ini. DeviceProfile needs to be PerObjectConfig, but TextureLODSettings does not, as it keeps its defaults in a normal class .ini section.

Moved per-user-facing settings from ProjectPackagingSettings into a new class, UPlaformsMenuSettings. This prevents projects from inconsistently writing settings for the same class to both DefaultGame.ini and Saved/Game.ini, which can cause issues where the editor has one value that doesn't match a target platform.

StagingDirectory, which is the user's location to store archived builds, is no longer exposed in settings.

Targets with names like "Foo_Mac" are no longer treated as platform extensions if they aren't under a "Mac" directory. Platform extensions will always include the Platform's name as part of their name.

Desktop

New:

Added Gauntlet PGO Profiling support on Windows platforms. Include -PGOFastGen to enable /FASTGENPROFILE for a better framerate during PGO Profiling. The profiling system now favors the PGC file that matches the executable when building PGO Optimize builds rather than failing.

Crash Fix:

Fixed a crash with Electra player when running DX11 on PC.

Linux

New:

Moved to the new 15.0.1 LLVM Linux Toolchain

Bug Fix:

Fixed a packaging failure on Linux when the project path contains a space character.

Fixed Linux touch ID handling.

Fixed a bug that would cause UMG Overlay mouse/touch input to fail after launching fullscreen Wayland application.

Fixed an issue wherein installed builds on Linux didn't have a stable UUID from machine to machine. This solves problems trying to share projects in a collaborative environment.

Mac

New:

Input chords on Mac now show Option key instead of Alt.

The Mac ARM cache line size is now 128 to improve support for Apple M1/M2.

Added handling for safeAreaInsets for monitors with notched screens in fullscreen mode.

Remove some unused and unexecutable code around getting the monitor name.

Updated minimum macOS requirements to Xcode14.1 & macOS12.5

The Mac editor window will no longer move to the front and cover other floating panels. Now it will work similarly to other platforms.

Undefine PF_MAX so it can be defined by UE for pixelformat instead of socket.h. This avoids an unnecessary include chain when including Cocoa.h.

Re-enabled DatasmithC4DImporter plugin now that it has support for Arm64 Macs.

Moved boilerplate program startup code into a shared Obj-C class, MacProgramDelegate, to make GUI programs simpler to create and maintain on Mac.

If CommandLineTools is detected as the build tools location (xcode-select -p), throw an exception with instructions on how to fix it, as the full Xcode solution is required for building from the commandline.

Stop logging the Xcode-select output every run.

Remove Catalina and Metal 2.2 support from Mac.

Improved the project generator solution for Xcode 14 requiring plist file for Mac local signing.

Removed the "Mac short circuit" blocks of code in the project generator, as it was skipping the code that sets up PLIST and BUNDLE_IDENT settings, which Xcode14 needs.

The project generator now directs Xcode towards the temporary plist files that it creates.

The project generator now copies the final plist on top of the temp plist file so that Xcode will pull the final plist into the .app at the end.

Updated Mac app and .uproject file icons for new Unreal Engine logo.

Mac builds now default to compiling for Host architecture, not Intel.

Mac now compiles universal binaries by compiling each architecture separately, then using lipo to merge them together.

Codesigning frameworks is now allowed under programs without a .uproject.

Added OneWorkspacePerPlatform and OneRunTargetPerPlatform modes for modern Xcode projects. These modes are disabled by default, as they are not production-ready.

Crash Fix:

Fixed a rare FrontendSession crash on Mac when viewing tooltips.

Fixed crash on Mac in Chromium Embedded Framework when pressing keys in Web Views (like Quixel Bridge) that are bound to the main menu.

Fixed a crash on shutdown in Mac programs. This was caused by TaskGraph shutting down earlier than some Stats code that uses it.

Bug Fix:

Fixed an issue with hostname-to-IP resolution with COTF/Sockets on MacOS.

Fixed an issue where Hot Reload would fail on Apple Silicon Macs, as Unreal Build Tool compiles the changed module as x86_64 by default. Now it checks the system architecture to determine what to compile for.

Fixed various threading and menu initialization issues with Programs on Mac.

Added a warning dialog on macOS (13.0 - 13.3) to ask users to update to avoid dlopen crash.

Fixed the Mac linking of all dependent .dylibs when .cpp changes are made that don't require relinking.

Fixed the path to engine directory for projects that are under a differently named directory on Mac.

Fixed MacPlatformProcess child write pips to block so it doesn't blow the buffer for spammy commands

Fixed Mac Perforce exe location discovery code for cases where it finds multiple P4 locations.

Rolled back removal of MacOSXVersionCompare, which caused a cook error on Mac.

Fixed an issue with Xcode having stale bundle identifiers when codesigning Blueprint projects. Xcode's build cache was caching old data. This change will force the bundle ID to be there so the cache won't cause problems.

Fixed symbolication in CrashReportClient on Mac with universal applications.

Always codesign Mac builds for new Xcode requirements, so Blueprint projects from InstalledBuilds will be signed correctly.

Fixed warning about always running a script phase in Legacy XcodeProjects.

Removed FixDylibDependencies on Mac by making "stub .dylibs" to mimic what Windows does with import libs, to solve circular dependencies

Fixed executable path for programs under Restricted.

Fixed paths when there's an ExeSubDir in the Target.

Mobile

New:

By default, runtime Virtual Textures on iOS and Android use 2 tiles as a maximum number produced per-frame.

XR

New:

Hololens: Usernames are no longer logged to align with other platforms on privacy.

Added new "Set Environment Blend Mode" node to set the OpenXR Environment Blend Mode. This node is currently experimental.

Swapchain format list is now passed to FOpenXRHMD::CreateSwapchain only when a non-sRGB format is requested.

Inserted XR Device Visualization Component in VRTemplate. The component is currently disabled but can be activated from its details panel using the Is Visualization Active checkbox. This can also be toggled from blueprints with the new Set Is Visualization Active Blueprint node available on the components.

HoloLens: Implemented ComputerName() and GetCurrentProcessId() functions.

Added the OpenXR Vive Tracker extension plugin to support Vive Trackers in-game and through LiveLinkXR.

Pico-VR version 3 controller model support has been added.

Added OpenXR headset connection while the editor is running.

Added Instanced Stereo Rendering & Multiview logging at XR runtime initialization.

Reintroduced mobile preview support in VR PIE (using mobile multiview fallback).

Improvement:

Added implementation of GetReferencerName() as required by FGCObject refactor.

OpenXR input is now additionally routed to the Enhanced Input editor subsystem.

OpenXR: Refined CopyTexture operations for layer and spectator screen usage.

Sped up instanced stereo rendering by avoiding branching in shaders. The view buffer duplicates per-view properties and uses the view id to index into them.

Crash Fix:

Hololens SkyAtmosphereComponentCrash fixed.

Bug Fix:

Fixed a bug that caused the SetShowDeviceModel function of Motion Controller Component not to refresh the visualization.

OpenXR: Fixed an off-by-one error which resulted in a trailing '\0' character embedded in FNames returned by FOpenXRHMDModule::ResolvePathToName.

OpenXR: Emulated layers swapchain will not use the prescribed layer format.

Removing ARPins now correctly releases corresponding ARKit Anchors.

Fixed a bug where an empty project name resulted in the project version being used as the application name for SteamVR.

Fixed issues with forward local lighting in mobile multi-view, so spotlights and other similar lights will now show up properly in secondary views (like the right eye).

Fixed foveated Variable Rate Shading behavior when not using instanced stereo. Now correctly uses two foveated patterns (one per eye), rather than a single pattern for both eyes.

Fixed raytracing shaders being affected by vr.InstancedStereo setting.

Fixed Lidar point cloud shader compilation issues in ISR.

Deprecated:

Deprecated GetViewConfigurations and GetViewLocations in IOpenXRExtensionPlugin.

Removed:

Pico-VR version 2 controller model support has been removed.

Removed clip distance method of ISR to reduce code paths (now platforms have to support multi-viewport rendering to support instanced stereo rendering).

XSX

Improvement:

Enabled PLATFORM_SUPPORTS_SM6_0_WAVE_OPERATIONS on XSX shaders.

Bug Fix:

Fixed GPU hangs encountered when utilizing derived PSOs on Lockhart.

Platform Mobile

New:

Translucency lighting type is now supported on mobile.

The reflection capture's encoded HDR data has been changed to RG11B10 format. It skips reflections for simple translucent materials on both mobile forward and deferred. Translucent materials fall back to single reflection or sky capture on mobile deferred if clustered reflection is disabled.

Added TAA pixel shader to use the hardware frame buffer compression on mobile devices.

Stationary/movable RectLights now render approximately as SpotLights on mobile. MSP 2/15/2023

Added support for GBuffer access in translucent materials with Mobile deferred shading enabled. Not yet supported with OpenGL ES.

Addressed lighting scenarios for Reflection Captures for mobile.

Added bSupportsClipDistance to DDSPI for mobile shader platforms that support SV_ClipDistance.

Improved quality and speed of runtime ETC compression for Virtual Textures on mobile platforms.

Improved quality of a certain compressed runtime Virtual Textures on mobile platforms by using sRGB color space where appropriate. OpenGL ES, which does not support texture views, will allocate separate physical spaces for sRGB and Linear data when needed.

Added mobile renderer support for thin translucent materials using dual src blending with DXC if there is hardware support. Not all Android devices support dual src blending, and it's disabled on IOS because it doesn't work with MRT.

Added a new occlusion culling method based on GPU feedback from occlusion geometry. This method reduces the number of drawcalls compared to traditional occlusion queries. It can be activated with r.OcclusionFeedback.Enable=1. Works only with mobile rendering at the moment.

ShadowQuality is now set to 2 for High-quality device profile buckets on Android/iOS to match quality between Forward and Deferred shading.

Added Variable Rate Shading support for mobile devices where the VR_KFR_fragment_shading_rate extension supports per-draw VRS, but not image attachment-based VRS (for example, QCOM 6x devices).

Mobile deferred shading will use a view combined ShadingModel mask as an optimization for lighting passes.

Crash Fix:

Fixed a crash on mobile OpenGL when MSAA is enabled without the GL_EXT_multisampled_render_to_texture2 extension.

Fixed a crash that occurred in FShaderCode::GetWriteAccess when r.Shaders.ExtraData=1 on Mac.

Fixed a crash on Android 9 Adreno 630 devices that occurred when rendering an image to a render target, sampling that image in a shader at the same time, but using different mips for each application.

Bug Fix:

Fixed a bug preventing modulated shadows from appearing in shadow preview mode.

Fixed an issue causing GPUScene to incorrectly change velocity on mobile.

Added LinearFilter texture capability flag to fix an issue preventing R16G16_UNORM from working with linear filter on some Mali devices.

Mobile TAA now processes before BloomSetup to fix bloom flickers.

Vertex color support was missing from InstancedStaticMesh on mobile. This issue has been corrected.

Fixed a crash on mobile OpenGL when using Retainer Boxes in UMG.

Fixed rendering issues with deferred decals on OpenGL.

Fixed a bug that caused CustomDepth to fail on mobile OpenGL when not writing to CustomStencil.

CSM caching now invalidates if FOV has changed.

Translucency for Mobile will now render when Debug View is enabled.

Fixed missing Local Lights if overlapping lights are more than 4.

Fixed missing per-instance CustomData in material pixel shaders.

Fixed issues with reflection environment rendering in projects that use Mobile deferred shading.

Fixed an issue where instance-bound extents weren't updating properly when using the mobile renderer.

Updated the mobile renderer to render the geometry when using "Sort Triangles".

Fixed issues with ASTC HDR texture compression.

Addressed overly intense specular lighting with mobile rendering.

Fixed Virtual Texture shimmering on mobile platforms. This adds manual Virtual Texture filtering on platforms that do not use TAA by default.

ScreenSize updates occur in MobilePreview when you select an LOD.

Fixed cases where the World Position Offset material attribute was ignored on Mobile platforms if project uses GPUScene option.

Niagara particle lights now work properly with Mobile deferred shading.

Fixed a normal map compression mismatch between runtime and streaming Virtual Textures on mobile platforms.

Fixed issues with YCoCg compression variants for runtime Virtual Textures on mobile platforms

Fixed a typo for "SecondaryUpscale" in a mobile post-processing.

Fixed a crash when creating the Vulkan render pass.

Mobile Depth of Field now works correctly on D3D11 and Desktop Metal shader platforms.

Fixed an issue preventing Android safezones from updating when orientation changed from landscape to reverse landscape.

Deprecated:

Removed SupportsCopyImage as GL ES 3.2 standard has glcopyImageSubData.

Android

New:

Optimized DXC for OpenGL to reduce driver impact when uploading Uniform Buffers.

Set Java 1.8 in sourceCompatibility and targetCompatibility on the engine's build.gradle.

Added Swappy support for Vulkan RHI.

Added AdMob app id and targeted tag/ratings selections to Android project settings.

Update Swappy to the latest version from Google AGDK. This implementation is modified to always use the Java DisplayManager and refresh rate selection.

Enabled Swappy on Android by default.

Added device profile for newly-released Mali-G7xx devices such as the Mali-G715 Immortalis.

Crash Fix:

Fixed a crash when playing a mp4 from UMG.

Bug Fix:

Fixed a copy-paste issue in Android MediaPlayer14, WebView and CameraPlayer14.

Fixed memory leaks on exit in Android applications.

Fixed issues throwing truncation warnings for Android modules.

Added support to receive multicast packets through the Wi-Fi interface. This is needed for LAN sessions to work on Android. You can enable this by marking a new checkbox in Android project settings under Advanced APK Settings to add the CHANGE_WIFI_MULTICAST_STATE permission and enable support.

Made the center of default Android icons opaque to fix issues with black backgrounds.

Fixed XBox and Razer wired controllers on Android 12+.

Android WebBrowser is now able to handle mouse input. This input is forwarded to webview as touch events.

Use an alternative bitmap rendering mode to support the WebBrowser 3D widget on Quest devices.

AndroidToolChain now uses the common ClangToolChain, and it will properly escape preprocessor definitions.

Allow UPL to use tools schema.

Allow "build" as part of project names.

Fixed a missing flag on PendingIntent calls (now required for Target SDK 31+).

Added key support for Android WebBrowser 3D widget.

Added additional Android controller ids for XBox wired controllers and Razer Kishi.

Fixed installation of Android NDK through the SetupAndroid.command script on macOS.

Fixed AAB archiving issue that occurred by incorrectly adding '-' when architecture was not specified.

Fixed a bug that occurred when rendering custom depth on OpenGL.

Fixed an issue causing Slate elements to not render correctly on some Android devices with Adreno GPUs.

G16 Grayscale textures will fall back to a R16F format, as R16 Unorm format is not universally supported on all Android devices.

Updated Google Play Services versions to remove CVE-2022-2390 issue.

Added an alternative Android File Server startup method. This solves launch failure and bind listener issues.

Fixed an issue with compiling of AFSProject on Mac.

Fixed issues causing Linux to fail to start Gradle.

WebGL and video playback is now permitted in 3D WebBrowser on Android.

Fixed issues with Oculus hardware acceleration.

Set buildToolsVersion in subprojects to match the main project for Android packaging.

Ignore focus events on Android to fix black screen on start problem with splitscreen mode.

Use commandline tools 8.0 instead of Latest for SetupAndroid scripts.

Fixed a missing WindowHandle in Swappy Vulkan initialization.

Disable Vulkan selection on Adreno 660 devices with driver 0525 or older due to flicker bug.

Removed:

Removed old GoogleGameSDK files that are no longer needed.

Removed Java version of MemAdvisor.

iOS, tvOS, and iPadOS

New:

Added module to link against Swift libraries. Some external SDKs may need to link against Swift standard library. You can achieve this by adding the following to the module ModuleRules subclass: PrivateDependencyModuleNames.Add("Swift");

Add support for XCFrameworks. XCFrameworks can be directly consumed by a module. They can be added like a regular Framework to the module ModuleRules subclass: PublicAdditionalFrameworks.Add(new Framework("FrameworkName","Path/To/Framework/FrameworkName.xcframework"));

arm64 is now set as the default architecture for iOS when no explicit argument is passed to UBT.

Added tvOS as a compilable target for the Bink Decoder library.

Added support to enable Objective-C ARC (Automatic Reference Counting) for individual modules. ARC support is set to off by default to keep previous behavior. You can enable it for an individual module by setting bEnableObjCAutomaticReferenceCounting = true; in its ModuleRules subclass. If ARC support is enabled the module should not consume shared PCHs. The engine won't use ARC extensively in the short term, and using shared PCHs will result in a compile error because shared PCHs were compiled with different flags than expected to be consumed. Avoid exposing public Objective-C interfaces on the module boundaries.

Enabled tvOS support for Electra.

Added a popup window warning on Metal platforms when no cooked content is found at startup.

Rebuilt soundtouch with Xcode 13.2.1 to match bitcode on iOS.

Fixed warnings in build health related to iOS 15.

Cleaned up Clang check for older Xcode versions.

Added bluetooth keyboard support on tvOS.

Bug Fix:

Fixed an iOS compile failure when ISPC is enabled.

Fixed missing quotes when Gauntlet runs on iOS with automation test command.

Fixed iphone packager .sln file.

Make sure the certificate chain used to evaluate trust is checked for nil when copied.

Fixed an issue with FIOSPlatformApplicationMisc::RequiresVirtualKeyboard that prevented iOS builds.

Add a default TVOS DeviceProfile to allow Niagara to correctly cook required content. This allows Niagara CPU Particles to appear on tvOS devices. Niagara GPU Particles are not supported on Apple A8 devices (such as AppleTV HD) due to missing support for IndirectDraw in Metal.

Deprecated:

Disable bitcode by default due to Apple's removal of bitcode support for Shipping builds being uploaded to the AppStore. Refer to Apple's Xcode14 release notes for more information.

Disabled unsupported PixelFormats BC4, BC6H & BC7 for iOS/tvOS and enabled D24.

Rendering

New:

Implemented support for the PixelDepth shading node for Ray Tracing and Path Tracing shaders.

Added support to write screenshots in EXR format when HDR is enabled, on platforms not supporting OpenEXR. The color space used is scRGB.

ISPCTexcomp fix for inconsistent behavior normalizing normals unlike all other TextureFormats. Maintain legacy behavior for existing textures; new textures with bUseNewFilters do not get normalized by ISPCTexcomp.

Added a soft-version of the ISM descriptor that can be used to store templates without loading the resources.

Added working color space support when rendering volumetric clouds with conversions from the sRGB gamut.

Reconnected the r.LUT.Size console variable for controlling LUT resolution in post-processing.

Enabled Virtual Shadow Maps 'Distant Lights' feature by default, significantly reducing the cost of non-moving local lights. Moving lights are automatically exempt from force caching.

Changed how the hair binding skeletal mesh scene proxy lookup is done. This fixes cases where the wrong skeletal mesh proxy is used when the skeletal mesh recreates its proxy while being used by the groom instance.

Prevented unnecessary ray-traced shadow tracing for hair strands, which saves 25% of the shadow cost in test cases with many lights.

Improved per-CV groom color precision from 8/8/8 bits to 11/11/10 bits.

Ray tracing instance counter stats now report active instances and total instances separately. Previously only active instances were reported, which is sometimes misleading. The total number of instances affects the TLAS memory allocation, the instance buffer building compute shader, and TLAS build itself.

Added "Max World Position Offset Displacement" to materials. It is used to clamp World Position Offset to a fixed distance, and to automatically extend the culling bounds of meshes, including the cluster culling bounds of Nanite clusters. Also added the ability to visualize clamped pixels in the "Out of Bounds Pixels" visualizer.

Added the "r.SceneDepthHZBAsyncCompute" console variable to run HZB generation on async compute. This prevents GPU under-utilization in scenes where a very large number of individual occlusion queries are issued. The "r.SceneDepthHZBAsyncCompute" console variable has the following possible values:

0: Don't use async compute (default)

1: Use async compute, start as soon as possible

2: Use async compute, start after ComputeLightGrid.CompactLinks pass

Added PrintBool to ShaderPrint.

Added support for using a stride to skip marking virtual shadow maps every pixel to improve page marking performance (r.Shadow.Virtual.PageMarkingPixelStrideX|Y).

Updated "HairDescriptionBulkData" to use "FEditorBulkData". This prevents loading descriptor data when loading groom assets. It also allows groom assets to be virtualized.

Added MeshDeformer support for Groom. This experimental initial iteration allows you to assign a mesh deformer to a groom instance. The mesh deformer has access to most hair control point attributes. It can write out modified positions (moved/trimmed/...).

Decreased the number of unique materials for hair in favor of supporting larger/hero groom. This is a short term fix. Primitive IDs should instead reference their material through cluster information.

Added diagnostic logging / screen message for showing non-nanite objects overlapping many virtual shadow map pages (r.Shadow.Virtual.NonNanite.NumPageAreaDiagSlots).

When a groom component is attached to a skinned mesh, the skinned mesh is now forced to update its dynamic data immediately, instead of (optionally) deferring them. This makes GDME optimization compatible with groom simulation.

Added "ClumpID" and "Per-Vertex bake AO" attribute support for groom geometry.

Added ShaderPrint zoom.

Unify all hair environment lighting integration. Evaluation is now in a common place and is consistent across calling sites. This changes Lumen hair integration which now simplifies evaluation (integration cost is now smaller). This also ensure dual scattering is properly evaluated for the hair pixel requesting it (such as having "use complex transmittance" bit enabled).

Enabled curve reordering by default, and fix invalid strand radius computation that occurred during groom building, when curve reordering or curve decimation was enabled.

Fixed "FScene::IncrementFrameNumber" to be thread safe (as it is called from the game thread).

Static mesh offline ray tracing data is now released immediately if ray tracing is known to be disabled at run-time due to user settings.

Added shader print assert.

Fixed an issue where RT geometry of hair strands was not visible in the RT debug view mode.

Add a groom view mode menu to the level editor. Unified most groom debug rendering to go through the view rather than console variables.

Mark a primitive scene proxy as excluded from ray tracing if it has no static meshes. Previously it was only excluded if it has no ray tracing geometries, however it is possible for a primitive to have a RT representation but no static meshes. For example, this may happen in the editor when trying to isolate a mesh section with no triangles.

Fixed issue in Global SDF that occurred when multiple objects with Mesh SDF that extended outside the bounding box overlapped.

Screen Space Reflections, Light Functions, Post Process Deferred Decals, and Nanite rendering passes are now affected by Variable Rate Shading.

Changed attribute storage for hair strands. All attributes are now stored in a single ByteAddress buffer, which simplifies adding new or optional attributes. All attributes can now be optional, which saves memory. Attributes which are at per-curve frequency are now stored once per curve instead of once per vertex. This saves memory with an indirection cost. Move vertex to curve mapping into the groom resource rather than the groom resources. GroomAsset size shrink by 5/6% and binding asset size shrink by 45% in simple case.

Compute and sample Global SDF in Translated World Space.

Updated the Variable Rate Shading manager to support using shading rate images from multiple sources. The currently available methods are "Foveated Shading (XR only)" and "Contrast Adaptive Shading". If more than one shading rate source is active, the manager uses the roughest provided shading rate for each pixel.

Improvement:

Improved the quality of mips for normal maps with the new bNormalizeNormals option, which is on by default for new textures.

Normal Maps were not renormalizing normal vectors after generating mips, which caused reduced length normals in the mips, which then bends them when we drop components for compression in BC5 or ASTC.

This will not change existing content, but will only normalize when the new option bNormalizeNormals is enabled.

Volumetric Fog is now a lot more stable under Dynamic Resolution.

Implemented changes to avoid calling GetPrimitiveData() redundantly. This function is large and contributes significantly to the shader compilation cost.

Improved memory management of Nanite Ray Tracing, which prevents out-of-memory (OOM) crashes in large projects.

Crash Fix:

Fixed crashes when importing groom only guide cache or having zero size radius.

Fixed several crashes in the Editor by removing "FLandscapeComponentSceneProxy"'s direct usage of a "UMaterialInterface" on the render thread.

Fixed invalid assert in groom component causing crash when deleting a groom LOD while ray tracing is enabled.

Fixed issues in HeightField object management which caused crashes and issues with height fields missing from the Global Distance Field.

Bug Fix:

Fixed a Materials issue where the InstanceToWorld node was not working correctly in some cases due to incorrect values in the transform matrix.

Implemented a fix to allow the UCableComponent to render to the CustomDepth buffer.

Fixed an incorrect Large World Coordinates error tolerance assert in TLargeWorldRenderScalar.

Fixed a use-after-free bug on Cascaded Shadow Maps (CSM) render target DebugName. Render target names are not copied, and so must be statically allocated to survive the function scope.

Corrected color display of grayscale compression with virtual textures when previewing textures.

Fixed a bug that caused the Virtual Shadow Map (VSM) cache to be invalidated, by adding a separate VSM cache for the views of each Scene Capture component. The memory management of the various page tables will be improved in future versions.

Fixed a bug where the custom culling query was being provided with the wrong VisibilityId value.

Fixed the offset of labels in the Nanite and Lumen overview visualization modes.

Fixed an inaccuracy in comparison of Instanced Static Mesh (ISM) descriptors if either did not have its hash computed.

Ensured that Sky Atmosphere coefficients are properly converted to the working color space.

Fixed an incorrect instance local to world matrix in Materials due to NEEDS_INSTANCE_LOCAL_TO_WORLD_PS being overwritten by a vertex property after a pixel property enabled it.

Fixed an ensure failure in the Dynamic Resolution code where a console variable was being read using the wrong accessor function.

Fixed a use-after-free bug on the Cascaded Shadow Maps RenderTarget debug name.

Fixed an overflow issue in morph target blending that could cause visible cracks in the geometry when blending many large morphs.

Fixed ambiguous type for bit shift' shader compiler spam from "OcclusionMask |= bIsBentNormalOccluded ? (1 Listener Redeployer menu item. The redeploy flow now also allows users to include or exclude individual devices via a checkbox.

Bug Fix:

Bumped the version for TcpMessaging. It was not bumped for 5.1 but should have been.

Virtual Scouting: Fixed interactor laser spline meshes recomputing physics-derived data every frame, as well as an analogous issue in the multi-user VR presence.

Virtual Scouting: Added a toast/notification if Virtual Scouting is unable to launch because the r.PostProcessing.PropagateAlpha cvar was set to an unsupported value.

Switchboard: sbl_helper.py now correctly handles p4 print returning multiple text records for a single file.

Added an overflow buffer for reliably sent messages so that fully sent segments waiting for ack do not block new messages from being sent.

Fixed a bug in Switchboard Listener that would cause child processes to have an invalid handle passed for stdin.

VR Editor Mode: Screen Percentage support

If VREM is enabled, Preview Screen Percentage no longer automatically disables.

Switchboard: Fixed an intermittent crash on multi-user launch/shutdown. Also, the running server is now correctly validated in more scenarios, such as if the server name contains hyphens, or uses a hostname instead of an IP address.

Virtual Scouting: Fixed a bug where attempting to enter Virtual Scouting with a Cinematic viewport active would lead to the view rendering as completely black. Entering Virtual Scouting now changes the active viewport back to Default.

Switchboard: Fixed an issue where focusing then unfocusing a class setting could reset all device overrides of that setting.

Sequencer Playlists: Initiating playback of an item while the Sequencer tab is closed no longer causes an existing pending take to get replaced (and configured Take Recorder sources to be lost).

Virtual Scouting: Users will no longer be unable to deselect actors if both hands are holding an interact tool. Second tool now falls back to navigation tool if context menu is activated.

UdpMessaging: Fixed a potential crash if the multicast socket wasn't created successfully.

Virtual Scouting: Fixed an issue where the VR transform gizmo was not centered on grouped objects.

Virtual Scouting: corrected naming on listed cameras in main menu UI and appearance of camera mark icons

更新说明 Editor

API Change:

Added ECVF_Scalability flag to p.RigidBodyNode and p.ClothPhysics CVars so that the scalability system is aware of them.

USplineMeshComponent::GetAxisValue() was renamed to USplineMeshComponent::GetAxisValueRef() to better reflect that a reference to the value is returned instead of a copy of the value. USplineMeshComponent::GetAxisValue() has been deprecated, and it will be removed in a future version. Please update any code to use USplineMeshComponent::GetAxisValueRef() instead.

Landscape

API Change:

Changed the landscape.OutputDiffBitmap and turns it into landscape.DumpHeightmapDiff and landscape.DumpWeightmapDiff (0 = no dump, 1 = mip 0 diff, 2 = all mips diff). Both of these output to the Saved/LandscapeLayers folder, with a sub-folder named after the current frame's date/time, under a sub-folder named after the landscape actor being updated.

Foundation Core

API Change:

Object handle API changed from using delegates to TFunction for performance. This upgrade replaces FObjectHandleReadDelegate::CreateStatic by passing in the function directly.

added the following macros to REQUIRE_ENSURE CHECK_ENSURE REQUIRE_CHECK for use in unit tests.

ObjectPathId was moved to private to hide implementation details.

FPackageName::ObjectPathToObjectName will now always return the leaf-most object name within the path (e.g., "/Game/MyAsset.MyAsset:SubObject.AnotherObject" -> "AnotherObject"). Any code that relied on the old behavior should use FPackageName::ObjectPathToSubObjectPath instead.

A FSavePackageContext::ExternalImportValidationFunc function needs to be added to the FSavePackageContext instead of specifying a validator.

Use of the UE_LOG macro requires format strings that are constant at compile time. This requirement was only partially enforced in past releases, and code that compiled before may now produce errors.

Upgrade Notes:

Added support for structured and localized logging via UE_LOGFMT, UE_LOGFMT_LOC, and UE_LOGFMT_NS_LOC. The new FOutputDevice:SerializeRecord receives structured log records. Update any implementations of FOutputDevice that would benefit from structured logging.

Insights

API Change:

Added GetName() to ITimingViewSession public interface. The Timing View widgets from TimingInsights, MemoryInsights and AssetLoadingInsights will have this name initialized with the corresponding FInsightsManagerTabs::*ProfilerTabId.

Framework AI Behavior Trees

API Change:

Fixed an issue where BlackboardComponent::IsValidKey was returning false negatives when called from a child Blackboard.

Made the OnTreeFinished function virtual.

AI EQS

API Change:

Added the following functions to FEnvQueryResult:

GetItemRawMemory: Returns the item's raw (byte) memory pointer.

GetItemAsTypeChecked: Converts query results to the type used by the query's generator to extract type-specific data from an item.

Audio

Upgrade Notes:

Soundscape Palettes without playback conditions will now automatically activate upon load and deactivate upon unload.

Blueprint Compiler

API Change:

For Blueprint content, we already redirect the functions to the double variants. However, C++ code that calls any of these deprecated functions will result in a warning that indicates the replacement function to use.

Blueprint Editor

API Change:

Added FReplaceInstancesOfClassParameters::bReplaceReferencesToOldCDOs and deprecated FBatchReplaceInstancesOfClassParameters. The FReplaceInstancesOfClassParameters::bClassObjectReplaced flag is legacy and not currently in use outside of the old hot reload path; it remains in place for backwards-compatibility, but an ensure() has now been added to guard against it being used incorrectly outside of that context.

Gameplay

API Change:

You can call GetInputDeviceHardwareIdentifier and GetMostRecentlyUsedHardwareDevice on the UInputDeviceSubsystem to get the most recently used hardware device for a given user.

Mass

API Change:

Removed FMassProcessingPhase.IsDuringMassProcessing and FMassProcessingPhaseManager.IsDuringMassProcessing in favor of FMassEntityManager.IsProcessing.

Use FMassRuntimePipeline::GetProcessors and FMassRuntimePipeline::GetMutableProcessors to access FMassRuntimePipeline::Processors

Modified Mass Dependency Solver to remove some of the fine-tuning tests when MASS_DO_PARALLEL == 0. No parallel execution of processors will take place.

Networking

API Change:

Overriding an Actor's NetCullDistanceSquared property:

Previously the NetObjectGridFilter would detect changes to an Actor's NetCullDistanceSquared property and act on that.

It is now also possible to override this property using new methods in the FReplicationSystemUtil API, these methods are:

SetCullDistanceSqrOverride

ClearCullDistanceSqrOverride

If you are using Iris and have a NetObjectPrioritizerDefinition for a prioritizer named PlayerState, make sure to add the following to your project's DefaultEngine.ini file:

[/Script/IrisCore.ObjectReplicationBridgeConfig] +PrioritizerConfigs=(ClassName=/Script/Engine.PlayerState, PrioritizerName=PlayerState)

Previously the NetObjectGridFilter would detect changes to the Actor's NetCullDistanceSquared property and act on that. Now you can override the value of that property via FReplicationSystemUtil::SetCullDistanceSqrOverride/ClearCullDistanceSqrOverride. This will affect the calculations in NetObjectGridFilter.

Level Design and Art Tools Geometry Core

API Change:

The updated UDynamicMeshComponent::SetDynamicMesh function prevents sharing a UDynamicMesh between multiple UDynamicMeshComponents via the SetDynamicMesh function.

Geometry Script

API Change:

A UPROPERTY macro was added on to the FGeometryScriptFillHolesOptions::bDeleteIsolatedTriangles member.

UV Editor

API Change:

Dynamic Mesh Overlay now supports merging elements, providing a method to merge one element to another, if they share the same parent, collapsing any references from the first element into references to the second.

Dynamic Mesh UV Editor now supports removing seams from edges, providing a method to remove (via the new Dynamic Mesh Overlay functionality) seams from an edge collection by iteratively merging elements together.

Refactored selection in UV Editor.

Localization

API Change:

Split the FText comparison API out of FText so that it can be used for FString.

FTextComparison now exists to provide static access to the collated comparison functions of FText, without needing to actually create an FText to do the comparison.

Implemented async loading of localization data.

BeginInitGameTextLocalization and EndInitGameTextLocalization have been removed as part of this change.

Now use InitGameTextLocalization (which is async) followed by FTextLocalizationManager::WaitForAsyncTasks.

Online

API Change:

The OnNetworkConnectionStatusChanged event was added to EOSSDKManager. Bindings for it have been added to the Switch, GDK, and Sony platform implementations.

Upgrade Notes:

Added the ability to set SocketSubsystemEOS Relay mode via config. Users can now configure which EOS P2P Socket relay mode they want to use by adding the following to a .ini configuration file: [SocketSubsystemEOS] RelayControl=NoRelays / AllowRelays / ForceRelays

Added forwarding capability for EOSSDK Network and application status events.

HTTP

Upgrade Notes:

Changed the default HTTP Manager type in GDK to WinHttp. XCurl can still be used by adding the -UseCurlGDK command line parameter.

Online Subsystem

API Change:

Previous implementation based in NSURLConnection can be still selected passing the command line flag UseNSUrlConnection.

Fixed redirection parsing to properly handle errors.

Removed deprecated permissions.

Config settings:

[OnlineSubsystemFacebook] Updated APIVer to 15.0.

[OnlineSubsystemFacebook.OnlineIdentityFacebook] Changed default value for bUsePopup to true since otherwise was very easy to break the login flow.

Only receipts for non-completed transactions are kept and duplicates are discarded.

Once a purchase is consumed the receipt will be removed so if you need some data from the receipt you should cache it before consuming the purchase Added support for "Pending Purchases".

Their receipts won't contain validation information until they get completed (it is not possible to validate them nor consume them before completed).

Made threaded calls consistent and kept only receipts for transactions still in progress. Discarded all previously kept duplicates stored after requesting transactions

GetLinkedAccountAuthToken changed from returning APP to SESSION tokens in 5.1. This change has been reverted and it returns APP tokens again. SESSION tokens can be asked for explicitly by passing "Session" in the TokenType parameter.

This is the stub in the public interface only. Actual implementation would be per platform.

Deprecated the OnSessionParticipantsChanged and OnSessionParticipantRemoved events and added new events OnSessionParticipantJoined and OnSessionParticipantLeft. It is advised to reference the new events to avoid breaking changes in future releases.

Upgrade Notes:

Removed Product Name from EOS BucketId and added logic to enforce the 60 character limit. The default BucketId for EOS Sessions will change in a future update, which will cause incompatibilities when performing EOS session searches with builds using previous versions.

Renamed EncryptionKey config key to ClientEncryptionKey due to an issue with reserved keywords. Existing configs using EncryptionKey will continue to load correctly in unpackages builds but users should migrate to fix packaged builds. It is not recommended to remove EncryptionKey from IniKeyDenyList or you will leak keys from other config sections in packaged builds.

WriteAchievements now supports calling UnlockAchievements to directly unlock achievements by name, matching the behavior of other OSS implementations. The old behavior is still present, but will be removed in 5.3. You can select the new behavior with the following config entry in Engine.ini hierarchy: [OnlineSubsystemEOS] bUseUnlockAchievements=true

Moved IpNetDriver dependency from OnlineSubsystemGDK into its own plugin. To reduce executable size on GDK platforms, use GDKNetDriver instead.

Pixel Streaming

API Change:

With the upgrade to AVCodecs, PixelStreaming Player functionality has regressed, and playback isn't functional. This will be resolved in UE 5.3.

Exposed Pixel Streaming JSON parsing API.

A temporary d3d device is created before calling AMD AGS as it will not check the DriverStore without an initialized device when agsDriverExtensionsDX11_CreateDevice is called. The temporary device is then destroyed. According to AMD this requirement is currently by design.

For users wishing to have custom handlers for responding to Pixel Streaming "command" messages, this is now possible through the IPixelStreamingInputHandler::SetCommandHandler method.

ConfigOptions consist of a pair of strings, they can be set using IPixelStreamingStreamer::SetConfigOption. Upon having a client connect, all ConfigOptions are converted to JSON and passed to the client in the "ConfigOptions" field of the "InitialSettings" message. Setting a ConfigOption to an empty string will clear it and cause it to not be sent. At present this is used to pass the "DefaultToHover" message as "true" if streaming from the Editor.

Main fix is to the VideoInputBackBufferComposited where we now have a target input rectangle instead of a point. This allows for a minimum point that's not (0,0).

Upgrade Notes:

Improved E2E latency on VCam + PixelStreaming. Added FPixelCaptureRHINoCopy when the provided texture is copy-safe.

Platform XR

Upgrade Notes:

Implemented additional VRNotificationsComponent callbacks in the OpenXR plugin. Applications can now be notified when the interaction profile changes which will signal when the controllers become available, when the user has switched to different controllers, or when they've been disconnected.

Platform Mobile

Upgrade Notes:

Fixed a crash when using the VK_EXT_fragment_density_map Vulkan extension.

Rendering

API Change:

SSAO support has also been added, but currently causes artifacts and is disabled by default. Fixes are planned for future releases.

Fixed a bug where GetCachedLODBias could be stale. The cached variable is now computed as needed so it's always correct. Remove calls to UpdateCachedLODBias as it is deprecated and now does nothing. Remove direct use of the CachedCombinedLODBias variable and call GetCachedLODBias instead.

Upgrade Notes:

Added ray and path tracing support for SplineMesh components. The new console variable r.RayTracing.Geometry.SplineMeshes can be used to quickly enable or disable support.

Added the r.DumpGPU.FrameCount console variable to specify a number of frames to dump when using the DumpGPU command.

Added the r.Translucency.AutoBeforeDOF console variable to automatically render PostDOF translucency before DOF when their component location is behind DOF's focus distance.

Added the r.DumpGPU.Delay console variable to allow for specifying a wait time between the DumpGPU command and the frame dump.

Architecture

API Change:

Removed the need to call BuildInstanceMaskAndFlags and BuildRayTracingInstanceMaskAndFlags functions manually in GetXXRayTracingInstance. They will be called in the renderer module. All functions manually called have been removed. Removed the RENDER_API public API for those functions in RayTracingInstance.h.

Lighting

Upgrade Notes:

Enabled virtual shadow map one pass projection by default. This can be a significant performance improvement for scenes with many shadowed local lights. Subsurface materials may need some tweaks to opacity or similar with these changes.

Materials and Shaders

API Change:

FMaterialShaderMap::GetShaderSource now accepts a permutation ID parameter; this can be 0 if the requested shader/vertex factory has no permutations.

This change necessitated removing the exposed AddShaderEntry and AddPlatformDebugData functions from the FShaderMapResourceCode class; with the change all of the shader code, debug data, and any warnings encountered for the shader are automatically appended to the shader map data via the AddShaderCompilerOutput function.

Upgrade Notes:

Reworked distortion to use material F0=>IOR by default. Use the root note refraction pin input to override IOR for art direction. Refraction is now disabled using the None mode. This data is converted automatically.

Path Tracer

Upgrade Notes:

A new set of controls has been added to the post-process volume to allow selective inclusion of direct vs. indirect lighting on diffuse, specular, and volume paths. This provides greater control over how the image is decomposed and enables rendering of specular only or volume only passes for greater control in external compositing applications. The Diffuse and Specular ShowFlags as well as the DirectLighting and GlobalIllumination ShowFlags are also now mapped to the same mechanism.

The old "Enable Emissive" checkbox has been removed as the new "Indirect Emissive" checkbox has the same behavior.

Decoupled IOR from specularity for solid and thin glass models.In the solid case, IOR now only affects ray bending, while SpecularColor controls the fresnel effect. Refraction must be enabled in the material to get a refractive event. Disabling refraction means the surface is simply transparent. When refraction is enabled but nothing is connected to the Refraction port in the material, the IOR is inferred from the material's specularity. In the thin case, IORnow affects the transmitted roughness, so that rough refraction is progressively disabled as Ior is reduced toward 1.0 as would happen in a real slab. When not using refraction, ThinTranslucent materials are rendered using transparency, while with refraction they are rendered with an actual bounce (to allow for roughness, and for consistency with the solid case). SpecularColor controls the fresnel effect.

Rendering performance with decals has been improved by only evaluating them when the path roughness is sufficiently low (for camera rays and sharp reflections/refractions). This behavior can be fine tuned with the following console variables:r.PathTracing.DecalRoughnessCutoff and r.PathTracing.MeshDecalRoughnessCutoff

Postprocessing

API Change:

Moved GPixelRenderCounters to RenderCounters.h.

Upgrade Notes:

Updated Epic TSR scalability settings with higher resolution history to better maintain image sharpness and stability under motion by default.

Moved optional TSR statistics from stat unit to stat tsr.

Fixed a bug in TSR cinematic scalability settings where the output image could diverge from the desired result.

Strata

Upgrade Notes:

[Substrate] Removed legacy metalness workflow without data conversion. This will invalidate a few Substrate materials.

Simulation Physics

Upgrade Notes:

Added a Physics Control Actor and additional functions to manage Physics Control Components. This includes adding support for named sets of controls and body modifiers. Renamed functions in Physics Control Component for clarity. These renames should be mostly handled by a redirect. However, blueprints/code using the control multiplier functions may need to be fixed manually due to the nature of the renames.

Tools UnrealBuildTool

Upgrade Notes:

Visual Studio 2022 is now the default generated solution and compiler if all available platforms are supported.This may require updating to the latest Microsoft Visual C++ Redistributable.

UI Slate

Upgrade Notes:

Added ApplyDisabledEffectOnWidgets console variable to control widgets' disabled visual. If enabled, the alpha of the widget will be set to 0.75 when disabled. The console variable is set to 1 by default and can be initialized in the DefaultEngine.ini project file.

Virtual Production IO

Upgrade Notes:

Disabled python function calls when using Remote Control by default. Accessing Remote Control Settings remotely is also disabled. This behavior can be changed in the Remote Control Project Settings under "Allow remote python execution."

Tools

Upgrade Notes:

Added logic to Virtual Scouting to prevent the zoom lens from being selected in VR Viewfinder. Only the prime lens will be selectable.

Added validation to check if lens options are changed during editor sessions by editing Project Preference > Cinematic Camera.



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有